Я был одним из тех людей, которые комментировали на свой предыдущий вопрос, так что я, вероятно, обязанных вам ответ здесь: о)
Вы выложили довольно много кода, и я не смотрел на это подробно. Однако, в общих чертах, то является причиной для использования WSDualHttpBinding и дуплексных контрактов в целом, а не более подход равный-равному, где у вас есть услуги по обе стороны, а именно:
дуплекса подход где у вас есть четко определенный сервер, который работает постоянно. Это обеспечивает концентратор взаимодействия. Идея заключается в том, что клиенты в некотором роде более преходящи, чем сервер. Клиенты могут запускать и выключать или перемещать местоположение, и сервер не должен заранее знать их. Когда клиент запускается, он предварительно настроен, чтобы знать, где находится сервер, поэтому он может «зарегистрироваться» непосредственно с сервером.
В отличие от этого, сервер не должен быть предварительно сконфигурирован, чтобы знать, где находятся клиенты. Он запускается и может запускаться независимо от любых клиентов. Он просто принимает «регистрацию» от всех клиентов, имеющих действительные учетные данные, когда они выходят в сеть, и может продолжать работать после того, как клиент переходит в автономный режим. Кроме того, если клиент перемещается, он просто повторно регистрируется на сервере в своем новом местоположении.
Таким образом, сервер в некотором смысле является более «важной» частью системы. Ни один клиент не может участвовать в общении без сервера, но сервер может работать независимо от любого клиента.
Чтобы сделать это с помощью дуплексной службы WCF, вам необходимо выполнить некоторую дополнительную работу, чтобы реализовать поведение публикации/подписки. К счастью, шаблоны и практики команды MSFT предоставили некоторые рекомендации о том, как это сделать
http://msdn.microsoft.com/en-us/library/ms752254.aspx
Это принципиально отличается от подлинного подхода равный-равному, где нет четко определенных хаб (т.е. сервер) для сети, и каждый узел может прийти и уйти, не влияя на общее функционирование сети.
Является ли весь код необходимым для понимания этого? Или вы могли бы лучше обобщить? Это похоже на много кода для того, что может быть простым вопросом ... –
спасибо justin - я согласен, но я действительно хотел объяснить все за один раз - люди продолжают спрашивать меня о app.config, код сервера и код клиента, контракты и т. д., так что все его там – user1438082
в строке дуплекс только для обратных вызовов - я хочу запустить клиентскую функцию с сервера. Не обратный вызов. – user1438082