2014-01-23 2 views
2

У меня есть центр уведомлений, который работает в фоновом режиме каждые несколько секунд и извлекает новые уведомления из БД, если есть подписки на его событие, он запускает событие с новыми уведомлениями.Невозможно отказаться от подписки на функцию signalR hub от события singelton

С другой стороны, у меня есть клиенты signalR, что подписаться на это событие так:

public void Subscribe() 
     { 
      NotificationCenter.OnNotificationArrived += PublishNotifications; 
     } 

В тот же хаб у меня есть этот метод, который удаляет подписку:

public override System.Threading.Tasks.Task OnDisconnected() 
     { 
      NotificationCenter.OnNotificationArrived -= PublishNotifications; 
      return base.OnDisconnected(); 
     } 

В PublishNotifications метод также лежит в одном и том же узле.

Когда я отлаживаю свой код, я вижу, что событие сначала равно null. После первой подписки событие имеет один метод. После очередной подписки событие имеет 2 метода. После удаления подписки событие все еще содержит 2 метода.

Любая идея, что я делаю неправильно?

BTW: Я использую signalr 1,2

+0

Похоже, вы вызываете 'OnDisconnected' в другом экземпляре класса, чем тот, который вы вызываете' Подписаться'. –

+0

Вы правы, это не тот хаб. как это произошло и как я могу его решить? – Avi

+0

Мы не можем сказать, я боюсь ... –

ответ

2

Я думаю, что я узнал важную Lession, которые должны быть совместно с другими новичками SignalR.

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

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

Спасибо, Джон за просвещение!

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