Signalr 更改信号机上的查询字符串

Signalr 更改信号机上的查询字符串,signalr,signalr-hub,Signalr,Signalr Hub,是否可以在不执行停止和启动的情况下更改信号机连接上的查询字符串 我正在这样做: $.connection.hub['qs'] = {arg1: 'kkkk', arg2: 'xxx',...}; $.connection.hub.stop(); $.connection.hub.start(); 此停止/启动导致我的系统将其解释为连接中断,这是出于许多原因而不可取的 当我删除它时,会使用较旧的querystring参数调用方法 您必须更新查询字符串的代码($.connection.hub.qs

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

我正在这样做:

$.connection.hub['qs'] = {arg1: 'kkkk', arg2: 'xxx',...};
$.connection.hub.stop();
$.connection.hub.start();
此停止/启动导致我的系统将其解释为连接中断,这是出于许多原因而不可取的


当我删除它时,会使用较旧的querystring参数调用方法

您必须更新查询字符串的代码(
$.connection.hub.qs={arg1:'kkkk',arg2:'xxx',…};
)将反映在Signar为该连接发出的任何未来请求的查询字符串中

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

但是,如果正在使用WebSockets,则不应该有后续请求将更新的查询字符串附加到。如果连接没有死掉,则至少是这种情况,强制重新连接

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

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

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

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

由于这种查询字符串更改仅与旧传输(长池、sse等)相关,因此在我的情况下,当用户通过web套接字连接时,这不是问题。谢谢您是否研究了此问题的任何解决方案,然后重新连接?我使用了下面的解决方案,基本上是绕过连接事件触发器在“传输层”中断连接。