Asp.net mvc 4 信号器连接id的格式不正确

Asp.net mvc 4 信号器连接id的格式不正确,asp.net-mvc-4,signalr,Asp.net Mvc 4,Signalr,我有一个从mvc4 c#razor engine构建的项目。 我添加了最新的signalr nuget包1.0.1 我的项目使用表单身份验证。 每次客户端从登录到注销,反之亦然,我都会在客户端上看到一个错误: > "NetworkError: 500 Internal Server Error - > http://myhost:51090/signalr/abort?transport=serverSentEvents&connectionToken=uIJvYLP3T0G

我有一个从mvc4 c#razor engine构建的项目。 我添加了最新的signalr nuget包1.0.1 我的项目使用表单身份验证。 每次客户端从登录到注销,反之亦然,我都会在客户端上看到一个错误:

> "NetworkError: 500 Internal Server Error -
> http://myhost:51090/signalr/abort?transport=serverSentEvents&connectionToken=uIJvYLP3T0GdHaowIlS4uPDA19ukUy7TaW8dcXoPfma4Mr52uoe7PLK9Hh3ip17X_3RbFXx92yEa7nxYVHaCiRAWVE5e05vvpLD0_blb94eUwdkXbmhkRPM2_Z590A64VBF2-eLB_8wCWq-dmkkkbe6EqP6c9YXN3WRF5IyNYkB6Wkom7O1ZoDavQQ0UWvok0"
在服务器端:

 The connection id is in the incorrect format.

我是否需要考虑以不同的方式与Sealalr一起工作,然后用身份验证? 当您有一个活动的信号器连接时,您似乎正在注销(修改您的用户)

发生这种情况的原因是,在服务器上的中止请求中,我们检查connectionId是否与正确的用户关联。因此,在连接仍处于活动状态时注销会导致您失去用户关联并导致错误


要解决此问题,请在注销之前停止信号器连接。

您似乎正在注销(修改您的用户),而您有一个活动的信号器连接

发生这种情况的原因是,在服务器上的中止请求中,我们检查connectionId是否与正确的用户关联。因此,在连接仍处于活动状态时注销会导致您失去用户关联并导致错误


要解决此问题,请在注销之前停止信号器连接。

您能否共享一个代码示例,演示如何为给定用户停止所有信号器连接?这将是一个相当复杂的代码段。实际上,您需要跟踪与用户关联的所有ConnectionId,然后创建断开客户端连接的客户端方法。一旦你有了这两个部分,每当你想停止一个用户的所有连接时,你只需调用客户端函数来停止与该用户关联的所有ConnectionId的连接。当客户端无法控制何时可以注销时,如何处理或容忍这一点?例如,基于sso的令牌因在其他地方使用相同的凭据而过期或失效?我只是在说JS客户端。最终,客户端将被发送到sso,因为令牌无效,但即使如此,我相信中止请求也会导致此异常。据我所知,从未为此调用HubPipelineModule.OnIncomingError。在0.2.0中,客户端将断开连接,因此必须重新启动。这样,您就可以知道您的凭据何时超时或信号器连接发生其他严重错误,因此,您可以连接到中的disconnected事件并执行您想要的逻辑。您能否共享一个代码示例,演示如何停止给定用户的所有signalr连接?这将是一个相当复杂的代码段。实际上,您需要跟踪与用户关联的所有ConnectionId,然后创建断开客户端连接的客户端方法。一旦你有了这两个部分,每当你想停止一个用户的所有连接时,你只需调用客户端函数来停止与该用户关联的所有ConnectionId的连接。当客户端无法控制何时可以注销时,如何处理或容忍这一点?例如,基于sso的令牌因在其他地方使用相同的凭据而过期或失效?我只是在说JS客户端。最终,客户端将被发送到sso,因为令牌无效,但即使如此,我相信中止请求也会导致此异常。据我所知,从未为此调用HubPipelineModule.OnIncomingError。在0.2.0中,客户端将断开连接,因此必须重新启动。通过这种方式,您可以知道您的凭据何时超时或信号器连接发生其他严重错误,因此您可以在中连接到断开连接的事件并执行所需的逻辑。您是否解决了问题?如果是-如何解决?:)是的,在进行FormAuthentication之前应断开客户端连接。注销需要从客户端调用到集线器。stop()是否解决了问题?如果是,如何解决?:)是的,在执行FormAuthentication之前应断开客户端连接。注销需要从客户端调用hub.stop()