2014-04-17 14 views
9

Ho appena iniziato a lavorare con SignalR. Ho implementato la riflessione dei dati in tempo reale sul mio sito usando signalr. Stavo ricevendo "Errore durante l'handshake di Web-Socket: codice di risposta imprevisto: errore di 400" sulla console quando si tentava di connettersi con il web-socket.Segnale: errore durante l'handshake WebSocket: codice di risposta imprevisto: 400

L'applicazione è sviluppata con Asp.net MVC - signalR 2.0.3 e ospitati su server Windows 2012 - IIS 8

ho trovato una soluzione da this link

Si dice che abbiamo bisogno di sito web per puntare a HTTPS (e avvalersi di SSL) quindi http per lavorare con web-socket. E il mio problema è stato risolto. Il mio dubbio è - non possiamo risolvere questo problema senza utilizzare HTTPS? Poiché ciascun sito Web potrebbe non richiedere di essere ospitato su HTTPS (che richiede SSL).

+2

Il tuo sito web può essere servita tramite HTTP in tutta WebSocket collega su SSL (WSS). Questo è uno schema normale/di lavoro ... – Malkocoglu

+0

La mia richiesta punta a ws: // * only e non wss: // * che ha avuto luogo nell'errore console –

+0

Beh, non so come funziona SignalR ma so che è possibile server HTML su HTTP e websocket su SSL ... – Malkocoglu

risposta

4

Se il problema sono i proxy esistenti nel percorso dal client al server, non c'è nulla che si possa fare se non si lamenta con il proprio provider (client e server).

How HTML5 Web Sockets Interact With Proxy Servers

Utilizzando una connessione sicura, si assicura che nessun proxy sta andando a pasticciare con la connessione.

22

uso questo tag nel file web.config:

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

sotto <system.web> tag. Descrivi il tuo framework di destinazione. L'errore verrà eliminato

+1

Questo ha funzionato per me, ma qualcuno può spiegare _why_? –

+7

@DanielMinnaar, certo! Perché Microsoft. –

0

Questo errore 400 può verificarsi anche se si esegue su più server dietro un bilanciatore del carico. Ispeziona il corpo della risposta 400 (es. Usando Fiddler) e vedi se trovi questo: The ConnectionId is in the incorrect format. In tal caso, il problema potrebbe essere che non si sta utilizzando lo stesso codice macchina su ciascun server delle applicazioni.

Vai a questa risposta per i dettagli sulla soluzione: https://stackoverflow.com/a/43479474/979202

Problemi correlati