【问题标题】:signalr The connection id is in the incorrect formatsignalr 连接 ID 格式不正确
【发布时间】:2013-03-11 21:30:44
【问题描述】:

我有一个从 mvc4 c# razor 引擎构建的项目。 我添加了最新的信号器 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.

我是否需要考虑以不同的方式(来自https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs)使用信号器,然后使用身份验证?

【问题讨论】:

  • 您的问题解决了吗?如果解决了 - 怎么解决? :)
  • 是的,在进行FormAuthentication之前应该断开客户端。SignOut需要从客户端调用hub.stop()

标签: asp.net-mvc-4 signalr


【解决方案1】:

当您有一个活动的 SignalR 连接时,您似乎正在注销(修改您的用户)。

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

要解决此问题,请在注销前停止 SignalR 连接。

【讨论】:

  • 您能否分享一个代码示例,展示我们如何停止给定用户的所有信号器连接?
  • 那将是一个相当复杂的代码 sn-p。本质上,您需要跟踪与用户关联的所有 ConnectionId,然后创建一个断开客户端的客户端方法。一旦你有了这两个部分,每当你想停止一个用户的所有连接时,你只需调用客户端函数来停止与用户关联的所有 ConnectionId 的连接。
  • 当客户端无法控制何时可以注销时,如何处理或容忍这种情况?例如,由于在其他地方使用了相同的凭据而导致过期或无效的基于 sso 的令牌?我只是在谈论 JS 客户端。最终客户端将被发送到 sso,因为令牌无效,但即便如此,我相信中止请求会导致此异常。据我所知,HubPipelineModule.OnIncomingError 从来没有被调用过。
  • 在 0.2.0 中,客户端将断开连接,因此必须重新启动。这样您就可以知道您的凭据何时超时或 SignalR 连接发生其他严重错误,因此您可以将断开连接的事件绑定到并执行您想要的逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 2019-06-30
相关资源
最近更新 更多