2012-10-20 72 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