asp.net - SignalR 长轮询传输

标签 asp.net signalr long-polling signalr-hub

我正在使用带有集线器的 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/

相关文章:

ios - Trigger.io 在后台保持长轮询连接打开

asp.net - Microsoft 依赖注入(inject)和 HttpClientFactory w/.NET Framework 4.6+/MVC 5.2/Web API 2

c# - ThreadPool.QueueUserWorkItem NullReferenceException

javascript - 以全屏模式启动 Google Chrome

asp.net - 更改 System.Web.Security.MembershipProvider (EPiServer) 中密码策略验证的错误消息

php - 来自 mysql 的长轮询信息不起作用

c# - 为什么 SignalR 在其契约(Contract)中及其内部各处使用 IList 而不是 IEnumerable?

azure - 更新应用程序设置时,Azure Functions 是否会引发 503 错误?

c# - 具有对称加密的 SignalR

python - 捕获 Bottle 服务器错误