2013-03-04 3 views
0

WCF duplex выполняет обратный вызов после того, как метод запущен на сервере, который затем запускает код на клиенте.Почему требуется wcf duplex?

Если я хочу выполнить метод на клиенте с сервера нажатием кнопки на сервере, то я не думаю, что дуплекс WCF подходит.

Почему я не просто создаю клиент и сервер на каждом конце своих двух приложений?

+1

Является ли весь код необходимым для понимания этого? Или вы могли бы лучше обобщить? Это похоже на много кода для того, что может быть простым вопросом ... –

+0

спасибо justin - я согласен, но я действительно хотел объяснить все за один раз - люди продолжают спрашивать меня о app.config, код сервера и код клиента, контракты и т. д., так что все его там – user1438082

+0

в строке дуплекс только для обратных вызовов - я хочу запустить клиентскую функцию с сервера. Не обратный вызов. – user1438082

ответ

3

Я был одним из тех людей, которые комментировали на свой предыдущий вопрос, так что я, вероятно, обязанных вам ответ здесь: о)

Вы выложили довольно много кода, и я не смотрел на это подробно. Однако, в общих чертах, то является причиной для использования WSDualHttpBinding и дуплексных контрактов в целом, а не более подход равный-равному, где у вас есть услуги по обе стороны, а именно:

дуплекса подход где у вас есть четко определенный сервер, который работает постоянно. Это обеспечивает концентратор взаимодействия. Идея заключается в том, что клиенты в некотором роде более преходящи, чем сервер. Клиенты могут запускать и выключать или перемещать местоположение, и сервер не должен заранее знать их. Когда клиент запускается, он предварительно настроен, чтобы знать, где находится сервер, поэтому он может «зарегистрироваться» непосредственно с сервером.

В отличие от этого, сервер не должен быть предварительно сконфигурирован, чтобы знать, где находятся клиенты. Он запускается и может запускаться независимо от любых клиентов. Он просто принимает «регистрацию» от всех клиентов, имеющих действительные учетные данные, когда они выходят в сеть, и может продолжать работать после того, как клиент переходит в автономный режим. Кроме того, если клиент перемещается, он просто повторно регистрируется на сервере в своем новом местоположении.

Таким образом, сервер в некотором смысле является более «важной» частью системы. Ни один клиент не может участвовать в общении без сервера, но сервер может работать независимо от любого клиента.

Чтобы сделать это с помощью дуплексной службы WCF, вам необходимо выполнить некоторую дополнительную работу, чтобы реализовать поведение публикации/подписки. К счастью, шаблоны и практики команды MSFT предоставили некоторые рекомендации о том, как это сделать

http://msdn.microsoft.com/en-us/library/ms752254.aspx

Это принципиально отличается от подлинного подхода равный-равному, где нет четко определенных хаб (т.е. сервер) для сети, и каждый узел может прийти и уйти, не влияя на общее функционирование сети.

+0

ok - вот проблема, хотя выше i state «Если я хочу выполнить метод на клиенте с сервера нажатием кнопки на сервере, тогда я не думаю, что дуплекс WCF подходит». - Это не дуплекс вообще - мне нужен сервер на клиенте, я считаю, – user1438082

+0

, пожалуйста, скажите мне, что я совершенно не прав, но мне еще не удалось убедить меня. – user1438082

+1

Возможно, вы не сможете разместить сервер на клиенте, если вы это сделаете не контролировать клиента. Вам нужно будет пробить дыру в своем брандмауэре, чтобы сервер был размещен в их среде. – TylerOhlsen

2

WCF Duplex используется, когда у вас есть функция публикации/подписки (также известная как Observer Pattern). Предположим, у вас есть услуга, которая подписывается на уведомления определенного типа (например, новое письмо). Обычно вам нужно периодически проверять обновления. Используя Дуплекс WCF, абонент может автоматически получать уведомление издателем при появлении обновлений.

+0

да - я понимаю, но я не думаю, что это для меня - здесь мне сказали, что это было но теперь, когда я провел день, кодируя все это, я не согласен http://stackoverflow.com/questions/15178434/wcf-client-and-server мысли приветствуются – user1438082

+1

Трудно сказать из поверхностного описания, но из небольшого Я мог понять, это, вероятно, не то, что вам нужно. Имейте в виду, что речь идет о способе обработки и коммуникации, который должен иметь место между конечными точками, а не обязательно о том, являются ли они P2P или нет. – Gigi