Два wcf-сервера против wcf-сервера с обратным вызовом

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

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

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

2 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам