2013-03-11 98 views
1

我有一个项目从mvc4 c#razor引擎构建。 我添加了最新的signalr nuget包1.0.1 我的项目使用表单认证。signalr连接ID格式不正确

> "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. 

我需要考虑与signalr工作的每一个用户从登录进入到退出,反之亦然我在客户端上得到一个错误的时间 不同的方式(从https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs),然后与身份验证?

+0

你解决了你的问题,如果是的话 - 怎么样? :) – 2014-05-15 18:38:35

+0

是的,在做FormAuthentication.SignOut需要从客户端调用hub.stop() – 2014-05-16 22:15:01

回答

1

看起来你正在注销(修改你的用户),而你有一个活动的SignalR连接。

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

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

+1

之前,客户端应该断开连接您可以共享一个代码示例,显示如何停止给定用户的所有信号连接? – Dennis 2013-05-27 07:52:29

+0

这将是一个非常复杂的代码片段。本质上,您需要跟踪与用户关联的所有ConnectionId,然后创建断开客户端的客户端方法。一旦你有了这两部分,只要你想停止一个用户的所有连接,你只需调用客户端函数就可以停止与用户关联的所有ConnectionId的连接。 – 2013-05-27 07:57:15

+0

当客户无法控制何时可以注销时,如何处理或容忍这种情况?例如基于sso的令牌过期或无效,因为在其他地方使用相同的凭据?我只谈论JS客户端。最终客户端将被发送到sso,因为令牌无效,但即使如此,我认为中止请求导致此异常。据我所知,HubPipelineModule.OnIncomingError永远不会被调用。 – 2013-09-13 22:05:11