Два wcf-сервера против wcf-сервера с обратным вызовом - PullRequest
1 голос
/ 15 июля 2011

У меня есть два приложения, которые должны общаться через WCF: Называется А и Б. Предположим, чтобы отправить значения в B для хранения / обновления B предположим, что список значений, хранящихся в нем, передается в A

старший программист в моей команде хочет открыть сервер WCF в A и другой сервер WCF в B.

Я утверждаю, что один должен быть сервером, а другой должен быть клиентом и использовать обратный вызов сервера. Чтобы избежать разделения интерфейса на две части, избежать циклической зависимости и дублирования настроек кода. он этого не понимает Может ли кто-нибудь помочь мне объяснить ему, почему его решение плохой код?

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Это зависит от ваших критериев.Давайте предположим модель клиент / сервер, где A - клиент, а B - сервер.Вы утверждаете, что B должен «подтолкнуть» данные к A.

Если вам действительно нужен push, то вы должны превратить B в дуплексный сервер.Это создает некоторую нагрузку на вашу полосу пропускания, поэтому, если у вас есть ограничение полосы пропускания, это может быть неправильным выбором.

Если вы можете подвергнуться некоторой задержке в точке А, чем вы могли бы выбрать механизм опросаваш собственный (может быть, основанный на времени или другой логике).

Если оба варианта не подходят, вы можете попробовать поменяться ролями.Итак, сделайте B клиентом, а A сервером.Это менее интуитивно, но может соответствовать вашему сценарию.Если вы можете понести задержку при хранении данных, сделайте опрос B для внесения изменений в данные и сохраните их с интервалом.

Если не может быть задержки в обоих случаях, а полоса пропускания ограничена, вы получите дваУслуги WCF.Хотя это может показаться глупым на первый взгляд, имейте в виду, что это сервисы , а не серверы.Это усложняет ситуацию, поэтому я бы остановился на этом в крайнем случае.

0 голосов
/ 15 июля 2011

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

Если приложение B хранит данные, то, конечно, они могут быть предоставлены приложению A в качестве службы. Он предоставляет «услугу» хранения данных без приложения A, которое беспокоится о том, как и где, и возвращает успешно сохраненные данные. Это именно та вещь, которую службы WCF должны обрабатывать.

Я предполагаю, что приложение A является тем, которое инициирует запросы (если у вас нет третьего приложения, о котором не упоминается, одно из них должно быть инициатором). Если приложение A инициирует действия (например, оно имеет пользовательский интерфейс или запускается для выполнения некоторой пакетной обработки и т. Д.), Его не следует моделировать как «службу».

Надеюсь, это поможет:)

...