signalr InvalidOperationException

时间:2013-05-10 17:29:52

标签: signalr invalidoperationexception

我最近开始在ASP.Net MVC 3应用程序中使用Signal R库。我能够使用Signal R向客户端发送消息。但我注意到,如果我从另一个浏览器登录到该应用程序,我会收到以下错误 -

异常类型:InvalidOperationException 异常消息:无法识别的用户身份。在活动的SignalR连接期间,用户身份不能更改。

服务器堆栈跟踪:    在Microsoft.AspNet.SignalR.PersistentConnection.GetConnectionId(HostContext context,String connectionToken)    在Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest(HostContext context)    在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回调,Object extraData)

在某些情况下,我开始反复出现此错误。事件日志会在几分钟内完成。 我在我的集​​线器类中覆盖了OnConnect,OnDisconnect函数,并从Java脚本启动了集线器连接。

1 个答案:

答案 0 :(得分:3)

在维持连接时,SignalR不允许用户Identity更改。这是因为SignalR的connectionToken充当了反xsrf令牌。

看来你的“其他”浏览器实际上只是另一个浏览器窗口。当您在另一个窗口中登录该应用程序时,它会在两个浏览器窗口中更改您的ASP.NET窗体身份验证cookie(以及您的身份)。

任何正在进行的SignalR连接在浏览器的auth cookie更改后尝试重新连接时都会遇到上述的InvalidOperationException。如果使用长轮询传输,SignalR可能会尝试非常频繁地重新连接。一旦重新连接因异常而失败,SignalR将重复尝试重新连接约40 seconds,之后SignalR将放弃并断开连接。