2010-09-20 2 views
0

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

ответ

2

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

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

Thera - это некоторые возможности для изменения этого поведения, но это означает замену экземпляра провайдера.

+0

Спасибо. Множественные контракты на обслуживание для одной и той же услуги, похоже, были тем, что мне не хватало. Я хотел бы, чтобы мой сервис являлся сервисом singleton, и кажется, что клиенты, использующие услугу обратного вызова, не «делят» данные с клиентами, используя контракт на отказ от обратного вызова. Не следует ли хранить те же данные независимо от контракта, который использует клиент? У меня есть InstanceContextMode = InstanceContextMode.Single, и он работал до того, когда клиенты поделились одним и тем же контрактом на обслуживание. Спасибо за вашу помощь. – Sean

Смежные вопросы