2015-09-01 144 views
1

我在Azure虛擬機上託管WebSockets(SignalR)應用程序,並且在遠程連接時遇到以下400(錯誤請求)錯誤。SignalR:Azure虛擬機上的WebSockets錯誤400

WebSocket connection to 'ws://xxx.cloudapp.net/signalr/connect?transport=webSockets& 
clientProtocol=1.5&connectionToken=JMLk3b...&connectionData=%5B%7B%22name%22%3A%22 
dashboard%22%7D%5D&tid=10' failed: Error during WebSocket handshake: 
Unexpected response code: 400 

在VM中本地訪問應用程序時不會發生這種情況。

我懷疑這是代理問題,如thesevariousarticles中突出顯示。然而,我似乎無法找到任何文章指出是否可以在Azure虛擬機上真正託管WebSockets應用程序(我知道他們最近啓用了WS on Azure Websites,但似乎虛擬機還沒有此功能)。

任何幫助,將不勝感激。謝謝!

回答

0

問題最終成爲代理服務器(如Squid)在各個ISP上使用客戶端,而不是Azure端的代理服務器。

+0

我有同樣的問題。你能解釋一下你的解決方案嗎? – CPA

+0

在您的客戶端(瀏覽器)和服務器(SignalR主機)之間建立網絡連接時,可能會有其他網絡設備/服務器(如代理服務器)參與到此過程中。這些中間人促進了客戶端和服務器之間的通信。但是,其中一些不支持WebSockets協議。所以很可能,他們認爲端口80上的流量是簡單的舊HTTP。來自端口80的WS流量將被拒絕,導致400.這個問題很可能是您的ISP或託管公司的代理服務器。 –

+0

嘗試連接並使用本網站發送消息:http://www.websocket.org/echo.html。如果失敗,可能是您的ISP的代理服務器不支持WebSocket。如果通過,它可能是主機上的代理服務器問題,或者您的SignalR主機配置存在問題。您可以在任一端使用WireShark查看流經線路的流量。這將幫助您查看炸彈的位置。 –