2014-04-17 12 views
9

Ich habe gerade angefangen mit SignalR zu arbeiten. Ich habe Echtzeit-Datenreflexionen auf meiner Website mithilfe von Signalgebern implementiert. Ich bekam "Fehler während des Web-Socket-Handshakes: Unerwarteter Response-Code: 400" -Fehler auf der Konsole beim Versuch, sich mit dem Web-Socket zu verbinden.SignalR: Fehler beim WebSocket Handshake: Unerwarteter Response Code: 400

Anwendung mit Asp.net MVC entwickelt - signalR 2.0.3 und Windows Server 2012 gehostet - IIS 8

I aus this link eine Lösung gefunden

Er sagt, dass wir die Website an HTTPS-zu-Punkt müssen (und nützt SSL) dann http mit web-socket zu arbeiten. Und mein Problem ist auch gelöst. Mein Zweifel ist - können wir dieses Problem nicht ohne HTTPS lösen? Da jede Website möglicherweise nicht auf HTTPS gehostet werden muss (was SSL erfordert).

+2

Ihre Website über HTTP bedient werden können, während die WebSocket über SSL Verbindung (WSS). Dies ist ein normales/funktionierendes Schema ... – Malkocoglu

+0

Meine Anfrage zeigt auf ws: // * nur und nicht wss: // * was im Konsolenfehler angezeigt wurde –

+0

Nun, ich weiß nicht, wie SignalR funktioniert, aber ich weiß, dass es möglich ist Server HTML über HTTP und Websocket über SSL ... – Malkocoglu

Antwort

4

Wenn das Problem die Proxies sind, die im Pfad vom Client zum Server vorhanden sind, können Sie nichts anderes tun, als sich bei Ihrem Provider (sowohl dem Client als auch dem Server) zu beschweren.

How HTML5 Web Sockets Interact With Proxy Servers

Durch eine sichere Verbindung verwenden, stellen Sie sicher, dass kein Proxy mit Ihrer Verbindung zu verwirren wird.

22

Verwendung dieses Tag in der Datei web.config:

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

unter <system.web> Tag. Beschreiben Sie Ihr Zielframework.Error wird verschwinden

+1

Das funktionierte für mich, aber kann jemand _why_ erklären? –

+7

@DanielMinnaar, Sicher! Weil Microsoft. –

0

Dieser 400 Fehler kann auch auftreten, wenn Sie auf mehreren Servern hinter einem Lastenausgleich ausgeführt werden. Überprüfen Sie den Körper der 400 Antwort (z. B. mit Fiddler) und sehen Sie, ob Sie dies finden: The ConnectionId is in the incorrect format. Wenn dies der Fall ist, liegt Ihr Problem möglicherweise darin, dass Sie nicht denselben Computerschlüssel auf jedem Anwendungsserver verwenden.

Sehen Sie diese Antwort für Details zu der Lösung: https://stackoverflow.com/a/43479474/979202

Verwandte Themen