2013-05-10 41 views
4

我最近開始在ASP.Net MVC 3應用程序中使用Signal R庫。我能夠使用Signal R將消息發送給客戶端。但我注意到,如果我從另一個瀏覽器登錄到應用程序,我得到以下錯誤 -signalr InvalidOperationException

異常類型:InvalidOperationException 異常消息:無法識別的用戶身份。在活動的SignalR連接期間,用戶身份不能更改。

服務器堆棧跟蹤: 在Microsoft.AspNet.SignalR.PersistentConnection.GetConnectionId(HostContext上下文,字符串connectionToken) 在Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest(HostContext上下文) 在Microsoft.AspNet.SignalR.Owin .CallHandler.Invoke(IDictionary的2 environment) at Microsoft.AspNet.SignalR.Owin.Handlers.HubDispatcherHandler.Invoke(IDictionary 2環境) 在Microsoft.Owin.Host.SystemWeb.OwinCallContext.Execute() 在Microsoft.Owin.Host.SystemWeb.OwinHttpHandler.BeginProcessRequest(HttpContextBase HttpContext的,AsyncCallback的回調,而額外對象)

而且在某些情況下,我開始反覆出現這個錯誤。事件日誌在幾分鐘內就會完成。 我重寫了我的集線器類中的OnConnect,OnDisconnect函數,並從Java腳本啓動了集線器連接。

回答

3

SignalR不允許用戶的Identity在保持連接的同時進行更改。這是因爲SignalR的connectionToken充當反xsrf令牌。

看來您的「其他」瀏覽器實際上只是另一個瀏覽器窗口。當您在另一個窗口中登錄應用程序時,它會在兩個瀏覽器窗口中更改ASP.NET窗體身份驗證Cookie(以及您的身份)。

任何正在進行的SignalR連接將在瀏覽器的auth cookie更改後嘗試重新連接時遇到上述的InvalidOperationException。如果使用長輪詢傳輸,SignalR可能會嘗試重新連接。一旦重新連接因異常而失敗,SignalR將重複嘗試重新連接約40 seconds,之後SignalR將放棄並斷開連接。

+1

有關解決此問題的最佳方法的任何建議,以便在舊窗口中重新建立連接,但使用新身份? – chrisb 2013-08-23 05:07:12

+0

用戶身份更改後,您將手動停止並重新啓動信號連接。 – halter73 2013-08-27 18:38:15

相關問題