我已经阅读了很多其他问题,Github Issue就此问题。解决方案似乎是在注销之前在客户端上调用停止或添加ping,以便客户端不会自动注销。
“连接ID格式不正确”或“用户身份” 在有效的SignalR连接期间无法更改“错误
如果正在使用身份验证,则可能会看到此错误 在连接停止之前注销。解决方案是 在记录客户端之前停止SignalR连接。
但是,在另一个典型情况下,一次只允许一个人登录该网站,应该如何处理?我正在谈论基于令牌的auth通过sso,如果用户从另一台机器或浏览器登录并且auth令牌对于前一个会话无效。在这种情况下,如果用户通过执行任何操作进入上一个会话,则页面刷新会导致用户被发送到登录页面(因为服务器知道身份验证令牌无效)。但是,如果用户在上一页上没有做任何事情(它在后台打开),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)