是否可以在不执行停止和启动的情况下更改 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/