2014-11-15 82 views
2

當我將應用程序託管在服務器中時,它會檢查服務器端事件並始終回退到長輪詢。服務器託管環境是Windows Server 2012 R1和IIS 7.5Signalr總是落入生產服務器中的長輪詢

如果我們能解決這個問題,有沒有辦法?

https://cloud.githubusercontent.com/assets/9750273/5050991/2f4cb262-6c59-11e4-9e35-db06b432d470.png

IE10,Chrome的38.0.2125.111和Firefox。在所有的瀏覽器3我得到長輪詢,服務器發送的事件被取消。據我瞭解,他們中很少有人告訴過,如果服務器是在代理和防火牆後面,那麼服務器發送的事件可能不起作用。由於該網站在生產服務器上,我沒有任何控制權。

有什麼可能導致此問題?如何調試相同?

+0

您可能只是忘了安裝WebSocket支持並將IIS留在默認設置! – Brunis

+0

Win Server 2012中不支持IIS 7.5和websocket R1 –

回答

-3

SignalR基於Web RTC。 Web RTC在瀏覽器和服務器之間創建持續的TCP連接。 HTTP連接不是持久的。每當瀏覽器調用服務器時,它都可以爲此請求創建一個新的TCP連接並獲得響應。 持久連接對於代理服務器來說是有問題的。使用負載均衡的signalR也很困難。您有多個Web服務器和負載均衡器(可能是代理服務器)選擇將您的請求傳輸到服務器場中的某個Web服務器,以便客戶端只能連接到負載均衡器。

但是: 首先檢查Web RTC是否在您的生產Web服務器上啓用!

+1

SignalR不*基於WebRTC。 WebRTC是用於視頻通話,語音聊天和文件共享的協議。 SignalR可以使用幾種傳輸層中的任何一種,具體取決於客戶端和服務器軟件的版本和配置。這些「最可取的」是[WebSocket](http://en.wikipedia.org/wiki/WebSocket),與您的回答不同,每次發送數據時不需要建立新的連接。 – mason

+0

服務器不支持Webscockets。它已在IIS 7.5和Windows Server 2012 R1 –

0

微軟有一個blog post關於讓SignalR在Server 2008 R2中與IIS 7.5一起工作。方向可能類似。

  1. Update the SignalR application's web.config file啓用 「運行的所有請求的所有被管理模塊」(簡稱,這是 RAMMFAR設置)。

  2. Update the web page that uses SignalR與服務器進行通信:

    • 添加一個參考json2.js庫。
    • 添加一個標籤,強制內容以最近的瀏覽器模式顯示。
  3. Set up a Windows Server 2008r2與IIS 7.5如下:

    • 安裝你的SignalR應用程序需要.NET Framework版本。
    • 創建一個網站並將它與相應的應用程序池相關聯。

這裏是你怎麼做RAMMFAR設置。

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
    </modules> 
</system.webServer> 

我不認爲有必要添加json2。js庫的參考。但這裏的meta標籤,你應該在你的網頁放置在頭:

<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 

對於IIS應用程序池,使用集成的模式,而不是經典。當然,使用.NET 4.0。

+1

中進行了配置。所有這些設置都需要注意。仍然通過長期投票進行溝通。無論如何得出爲什麼使用長輪詢的真正原因? –

2

如果你想在IIS

這裏它支持您應該啓用的WebSocket的角色/功能需要啓用作出的截圖它的工作:

WebSocket protocol support

我希望幫助您! :)

+0

它的IIS 7.5和websocket不支持 –

+0

然後你需要升級 – Brunis

+0

@Brunis他沒有具體說明他需要WebSockets,但他確實提到他期待Server Sent Events能夠工作。所以他可能不需要升級。 – mason