我正在使用带有集线器的 SignalR 0.5.3,并且我明确地将传输设置为长轮询,如下所示:
$.connection.hub.start({ transport: 'longPolling' }, function () {
console.log('connected');
});
使用这样的配置(在 global.asax.cs Application_Start 方法中):
GlobalHost.DependencyResolver.UseRedis(server, port, password, pubsubDB, "FooBar");
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(2);
GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(15);
然而,长轮询似乎既不适用于开发(IIS express)也不适用于生产(IIS 7.5)环境。连接似乎正确,但是长轮询请求总是超时(大约 2 分钟后),然后重新连接。来自 IIS 的日志在这里。第一次超时请求的响应:
{"MessageId":"3636","Messages":[],"Disconnect":false,"TimedOut":true,"TransportData":{"Groups":["NotificationHub.56DDB6692001Ex"],"LongPollDelay":0}}
超时重新连接响应如下所示:
{"MessageId":"3641","Messages":[],"Disconnect":false,"TimedOut":true,"TransportData":{"Groups":["NotificationHub.56DDB6692001Ex"],"LongPollDelay":0}}
我将不胜感激有关此问题的任何帮助。谢谢。
编辑
如果重新连接意味着新的长轮询周期的开始,为什么当 global.asax.cs 中的 KeepAlive 设置设置为 15 秒时,它会在大约 2 分钟后启动?问题是我在 IIS 前面有一个反向代理,它在 25 秒后超时保持活动请求,因此当达到此反向代理超时时我得到 504 响应。