我正在使用带有集线器的 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 的日志为 here 。第一次超时请求的响应:
{"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 响应。
最佳答案
看看这篇文章:How signalr works internally 。长拉的工作方式是在设定的时间后连接将超时或收到响应并重新拉(重新连接)
关于asp.net - SignalR 长轮询传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12991597/