当我为运行SignalR集线器的站点回收我的应用程序池时,javascript客户端无法重新连接。但如果客户端在浏览器上刷新,一切都会好的。
在客户端控制台日志中,这些行在重置应用程序池后每秒重复多次:(我已用abcd替换了连接令牌)
LOGG: [15:51:19 UTC+0200] SignalR: Raising the reconnect event
LOGG: [15:51:19 UTC+0200] SignalR: An error occurred using longPolling. Status = parsererror. undefined
LOGG: [15:51:19 UTC+0200] SignalR: SignalR: Initializing long polling connection with server.
LOGG: [15:51:19 UTC+0200] SignalR: Attempting to connect to 'http://lab/signalr/reconnect?transport=longPolling&connectionToken=abcd' using longPolling.
LOGG: [15:51:19 UTC+0200] SignalR: Raising the reconnect event
我尝试在集线器上禁用所有身份验证,但结果仍然相同。 服务器和客户端都在SignalR v1.0.1上运行
客户端上的hubconnection设置如下:
var connection = $.hubConnection('http://lab:8097', { logging: true });
var proxy = connection.createHubProxy('task');
connection.start({ jsonp: true }).done(function () {
proxy.invoke('OpenTask', id);
});
我还在服务器端集线器注册上使用了crossdomain:
RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });
服务器在IIS 7.5上运行,客户端是IE9。
任何人都知道出了什么问题?
答案 0 :(得分:3)
这个问题将在1.1 RTW中解决(尚未发布,目前只有beta版已经发布)。
以下是您的参考修正:https://github.com/SignalR/SignalR/issues/1809。如果您想提前修复此问题,可以执行问题中提到的更改。
最后,如果您确实选择实施此修复,则需要在连接上处理.disconnected事件并完全重新启动连接。