Как получить только один экземпляр при вызове GetCallbackChannel ()? - PullRequest
0 голосов
/ 13 февраля 2012

У меня небольшая проблема с моей службой WCF.
На самом деле, пользователь может подписаться на услугу «публикации».

Я просто делаю OperationContext.Current.GetCallbackChannel<IPublishing>();
Затем я добавляю возвращенный объект в список (вид List<IPublishing>)

Поскольку я хочу, чтобы мои клиенты получали уведомление, когда я публикую сообщение, я просто вызываю обратный вызов всех подписавшихся пользователей.

Это прекрасно работает, но пользователь может подписаться дважды, а я не хочу.
Вот почему я делаю if (!theList.Contains(theCallbackChannelReturned)), чтобы проверить это ограничение ...

Дело в том, что каждый раз, когда я создаю канал обратного вызова, кажется, что он создает новый экземпляр IPublishing, даже на том же клиенте ...

Я не знаю, как это сделать ... Я понял, что OperationContext.Current.InstanceContext возвращает тот же хэш-код, но GetCallbackChannel не ...

Спасибо!

1 Ответ

1 голос
/ 13 февраля 2012

В вашей реализации обратного вызова клиента вы должны сделать следующее:

[CallbackBehavior(
    ConcurrencyMode = ConcurrencyMode.Reentrant, 
    UseSynchronizationContext = false)]
public partial class ServiceClient : IMyService_Callback 
{ .... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...