signalr - 更改 signalR 上的查询字符串

标签 signalr signalr-hub

是否可以在不执行停止和启动的情况下更改 SignalR 连接上的查询字符串?

我正在这样做:

$.connection.hub['qs'] = {arg1: 'kkkk', arg2: 'xxx',...};
$.connection.hub.stop();
$.connection.hub.start();

此停止/启动导致我的系统将其解释为连接中断,出于多种原因,这是不可取的。

当我删除它时,会使用旧的查询字符串参数调用方法。

最佳答案

您必须更新查询字符串的代码 ($.connection.hub.qs = {arg1: 'kkkk', arg2: 'xxx',...};) 将得到反射(reflect)在 SignalR 对该连接发出的任何 future 请求的查询字符串中。

在除 WebSocket 传输之外的任何情况下,即服务器发送事件、永久帧和长轮询,任何后续服务器集线器调用都应通过带有更新的查询字符串的 Ajax 请求进行。

但是,如果正在使用 WebSockets,则不应有后续请求附加更新的查询字符串。至少,如果连接不会强制重新连接,情况就是这样。

一种解决方案是像您一样重新启动连接。如果您在开始连接之前设置查询字符串,那就更好了。

如果您确实需要在连接启动后更改查询字符串,并且不希望系统将此解释为全新的连接,您也许可以执行以下操作:

$.connection.hub.qs = {arg1: 'kkkk', arg2: 'xxx',...};
$.connection.hub.transport.lostConnection($.connection.hub);

这基本上会欺骗传输,让其认为连接已断开,并导致它与更新的查询字符串重新连接,而无需重新协商并与新的 ConnectionId 连接。这种方法的问题是第二行使用了未记录的 API。

关于signalr - 更改 signalR 上的查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259229/

相关文章:

Signalr (1.0.0-alpha2) 集线器 - 您可以在连接开始后添加客户端功能吗?

java - android signalR hub连接应用程序与服务器协商失败

Azure SignalR 服务

asp.net-core - 在 ASP.NET Core SignalR 中从 TestServer 初始化 HubConnection

azure - Azure 上带有负载均衡器的 SignalR 连接

asp.net - 如何在 Azure 移动应用中的 SignalR.Hub 中获取 MobileAppSettingsDictionary

c# - 我可以在 SignalR Hub 中调试 OnConnected 方法吗?

javascript - 检索计数语句并通过 signalR 发送给客户端

signalr - 为什么 HTTPContext.Current.Session 在 ASP .Net MVC 应用程序中使用 SignalR 2.x 库为空?

c# - 为什么 SignalR Context.User.Identity.Name 是空的?