是否可以在不执行停止和启动的情况下更改SignalR连接上的查询字符串?
我这样做:
$.connection.hub['qs'] = {arg1: 'kkkk', arg2: 'xxx',...};
$.connection.hub.stop();
$.connection.hub.start();
这个停止/启动导致我的系统将其解释为连接中断,出于多种原因这是不可取的。
当我删除它时,使用较旧的查询字符串参数调用方法。
答案 0 :(得分:7)
您必须更新查询字符串($.connection.hub.qs = {arg1: 'kkkk', arg2: 'xxx',...};
)的代码将反映在SignalR为该连接进行的任何未来请求的查询字符串中。
对于除WebSocket传输之外的任何内容,即服务器发送事件,永久帧和长轮询,任何后续服务器中心调用都应由具有更新查询字符串的Ajax请求进行。
但是,如果正在使用WebSockets,则不应该有后续请求将更新的查询字符串附加到。如果连接没有强制重新连接,至少会出现这种情况。
一种解决方案是像您一样重新启动连接。如果你在首先开始连接之前设置查询字符串会更好。
如果您确实需要在连接启动后更改查询字符串,并且您不希望系统将其解释为全新连接,则可以执行以下操作:
$.connection.hub.qs = {arg1: 'kkkk', arg2: 'xxx',...};
$.connection.hub.transport.lostConnection($.connection.hub);
这将基本上欺骗传输认为连接已死,并使其重新连接更新的查询字符串,而无需重新协商并连接新的ConnectionId
。这种方法的问题在于第二行使用了未记录的API。