2014-01-23 25 views
2

我有一個通知中心,它是一個singelton,每隔幾秒在後臺運行並從DB獲取新通知,如果訂閱了他的事件,他會觸發事件與新的通知。無法從singelton事件取消訂閱signalR集線器功能

在另一邊我有訂閱此事件這樣的signalR客戶:

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

在同一集線器我有這樣的方法刪除訂閱:

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

的PublishNotifications方法也在於同一個中心。

當我調試我的代碼時,我可以看到事件一開始是空的。 第一次訂閱後,該事件包含一種方法。 在另一次訂閱後,該事件包含2個方法。 刪除訂閱後,事件仍然有2種方法。

任何想法我做錯了什麼?

BTW:我使用signalr 1.2

+0

聽起來好像你在類的另一個實例上調用'OnDisconnected',而不是調用'Subscribe'。 –

+0

你是對的,這是不一樣的樞紐。這是怎麼發生的,我該如何解決? – Avi

+0

我們真的不知道,恐怕... –

回答

2

我想我瞭解到,應與其他SignalR新手共享的重要lession。

當SignalR創建瀏覽器和服務器之間的連接時,它也創建了Hub實例並將其保留用於整個會話,我錯了。它看起來像SignalR在引擎蓋下保持連接,並且每當客戶端調用Hub時,都會在請求結束時創建並處理新的Hub實例。這就是爲什麼我不能退訂通知中心。

我只需要通過掛鉤並在後臺運行的相同實例取消訂閱通知中心。

感謝Jon的啓發!