2014-04-17 155 views
9

我剛開始使用SignalR。我使用signalr在我的網站上實現了實時數據反射。當試圖連接到網絡套接字時,我在控制檯上得到了「Web-Socket握手期間的錯誤:意外的響應代碼:400」錯誤。SignalR:在WebSocket握手期間出錯:意外的響應代碼:400

應用開發與Asp.net MVC - signalR 2.0.3和託管在Windows Server 2012 - IIS 8

我找到了一個解決方案,從this link

它說,我們需要的網站指向HTTPS (並利用SSL),然後http使用網絡套接字。我的問題也解決了。我的疑問是 - 無法使用HTTPS解決此問題?由於每個網站可能不需要託管在HTTPS(需要SSL)上。

+2

您的網站可以通過HTTP,而你的WebSocket連接通過SSL(WSS)提供服務。這是一個正常/工作計劃... – Malkocoglu

+0

我的請求指向ws:// * only而不是wss:// *,它在控制檯錯誤中顯示爲 –

+0

嗯,我不知道SignalR的功能如何,但我知道可以HTTP上的服務器HTML和SSL上的websocket ... – Malkocoglu

回答

4

如果問題是存在於從客戶端到服務器的路徑中的代理,那麼除了向提供者(客戶端和服務器)投訴外,您無能爲力。

How HTML5 Web Sockets Interact With Proxy Servers

通過使用一個安全的連接,可以確保無代理會惹你的連接。

22

使用這個標籤在你的web.config文件:

<httpRuntime maxRequestLength="40960" targetFramework="4.5" requestValidationMode="2.0" /> 

<system.web>標籤。 描述您的目標框架。錯誤將會消失

+1

這對我有效,但任何人都可以解釋_why_? –

+7

@DanielMinnaar,當然!因爲微軟。 –

0

如果您在負載均衡器後面的多個服務器上運行,也會發生此400錯誤。檢查400響應的正文(例如,使用Fiddler),看看你是否發現:The ConnectionId is in the incorrect format。如果是這樣,那麼你的問題可能是你沒有在每個應用程序服務器上使用相同的機器密鑰。

看到這個答案對解決方案的詳細信息:https://stackoverflow.com/a/43479474/979202

相關問題