2012-10-20 54 views
1

我使用SignalR 0.5.3与集线器和我明确地设定输送到长轮询是这样的:SignalR长轮询传输

$.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}} 

我希望关于这个问题的任何帮助。谢谢。

编辑

如果重新连接意味着新的长轮询周期的开始为什么它〜2分钟后,当在的global.asax.cs保持活动设置被设置为15秒启动?与此问题是,我有一个反向代理在IIS前超时25秒后保持活动请求,因此,当达到此反向代理超时时,我得到504响应。

+0

我不确定你描述的是什么问题。超时发生在你没有得到答案时,完全是由设计决定的。有什么问题? – davidfowl

+0

@dfowler:那么重新连接意味着新的长轮询周期的开始?为什么在将KeepAlive设置为15秒后,约2分钟后超时?查看更新的问题。 – yojimbo87

+0

保持活力不适合长时间(它没有意义)。 LongPolling默认等待2分钟,您可以将其扩展为适用于您的环境的任何内容。我仍然不理解问题。你只是问它是如何工作的? – davidfowl

回答

4

看看这篇文章:How signalr works internally。长时间拉动的方式是经过一段时间后,连接超时或接收到响应并重新连接(重新连接)

+0

感谢您的链接。查看更新的问题。 – yojimbo87