0

我已经阅读了许多其他问题和关于此的Github 问题。解决方案似乎是在注销之前在客户端上调用 stop 或添加 ping 以便客户端不会自动注销。

“连接 ID 的格式不正确”或“在活动 SignalR 连接期间用户身份无法更改”错误

如果正在使用身份验证,并且客户端在连接停止之前已注销,则可能会出现此错误。解决方案是在注销客户端之前停止 SignalR 连接。

但是,在另一种典型情况下,一次只允许一个人登录站点,应该如何处理?我说的是通过 sso 进行基于令牌的身份验证,如果用户从另一台机器或浏览器登录,并且身份验证令牌对于前一个会话无效。在这种情况下,如果用户通过执行任何操作进入上一个会话,则页面刷新会导致用户被发送到登录页面(因为服务器知道身份验证令牌无效)。但是,如果用户在前一页上没有做任何事情(它在后台打开),SignalR 托管应用程序会继续抛出上述错误。应该如何处理?发生这种情况时,主机应用程序会引发大量异常。这是堆栈跟踪...

Server stack trace: 
   at Microsoft.AspNet.SignalR.PersistentConnection.GetConnectionId(HostContext context, String connectionToken)
   at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest(HostContext context)
   at Microsoft.AspNet.SignalR.Owin.CallHandler.Invoke(IDictionary`2 environment)
   at Microsoft.AspNet.SignalR.Owin.Handlers.HubDispatcherHandler.Invoke(IDictionary`2 environment)
   at Microsoft.Owin.Host.SystemWeb.OwinCallContext.Execute()
   at Microsoft.Owin.Host.SystemWeb.OwinHttpHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object extraData)

Exception rethrown at [0]: 
   at Microsoft.Owin.Host.SystemWeb.Utils.<>c__DisplayClass1.<GetRethrowWithNoStackLossDelegate>b__0(Exception ex)
   at Microsoft.Owin.Host.SystemWeb.CallContextAsyncResult.End(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
4

1 回答 1

1

我将您的报告添加到 SignalR 问题https://github.com/SignalR/SignalR/issues/2544

于 2013-09-12T16:51:25.237 回答