Служба обратного вызова WCF, размещенная на основе basicHttpBinding и wsDualHttpBinding

У меня есть служба обратного вызова, размещенная на wsDualHttpBinding. Я хочу добавить клиента, который будет опрашивать данные, а не получать обратный вызов (это будет мобильное устройство, использующее wince для демонстрационных целей). Мне было любопытно, как это лучше всего сделать? Вы не можете создать клиентский прокси с помощью NetCFSvcUtil со службой, размещенной с wsDualHttpBinding (я понимаю это), но вы не можете разместить службу обратного вызова через basicHttpBinding. Мне действительно нужна одна и та же служба, размещенная как на basicaHttpBinding (клиенты будут опрашивать данные), так и на wsDualHttpBinding (обратный вызов уведомит клиентов о данных). Есть идеи, как лучше всего справиться с этим без создания двух отдельных служб для размещения одних и тех же данных?


person Sean    schedule 20.09.2010    source источник


Ответы (1)


Что вы подразумеваете под двумя отдельными сервисами, хранящими одни и те же данные? Ожидаете ли вы использовать один и тот же экземпляр службы для обработки запросов wsDualHttpBinding и basicHttpBinding?

Ваша текущая проблема заключается в том, что служебный интерфейс для дуплексной связи не может использоваться для basicHttpBinding. Вам необходимо создать второй сервисный контракт и реализовать его в том же сервисе. В этом случае вы можете предоставить две конечные точки для службы: одну дуплексную с WSDualHttpBinding и одну с BasicHttpBinding. Конечные точки должны иметь разные относительные адреса. С точки зрения клиента эти конечные точки являются отдельными службами - для каждой из них требуется отдельный клиентский прокси. Поэтому, если ваша служба не является одноэлементной, у вас будет новый экземпляр службы для каждого клиентского прокси. Новый экземпляр службы означает отсутствие обмена данными.

Есть несколько возможностей изменить это поведение, но это означает замену поставщика экземпляров.

person Ladislav Mrnka    schedule 20.09.2010
comment
Спасибо. Кажется, мне не хватало нескольких сервисных контрактов на одну и ту же услугу. Я хотел бы, чтобы моя служба была одноэлементной службой, и кажется, что клиенты, использующие службу обратного вызова, не обмениваются данными с клиентами, использующими контракт службы без обратного вызова. Разве служба не должна хранить одни и те же данные независимо от контракта, который использует клиент? У меня InstanceContextMode = InstanceContextMode.Single, и он работал раньше, когда клиенты использовали один и тот же сервисный контракт. Спасибо за вашу помощь. - person Sean; 27.09.2010