17

I have just started working with SignalR. I have implemented real-time data reflection on my site using signalr. I was getting "Error during Web-Socket handshake: Unexpected response code: 400" error on console with when trying to connect with web-socket.

Application is developed with Asp.net MVC - signalR 2.0.3 and hosted On Windows server 2012 - IIS 8

I found one solution from this link

It says that We need website to point to HTTPS (and avail SSL) then http to work with web-socket. And my Issue resolved too. My doubt is - cant we solve this issue without using HTTPS ? As each website might not require to be hosted on HTTPS (which requires SSL).

Community
  • 1
  • 1
Roshni Shah
  • 309
  • 1
  • 3
  • 8

5 Answers5

35

use this tag in your web.config file :

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

under <system.web> tag. Describe your target framework.Error will be disappear

Saurabh Srivastava
  • 1,093
  • 14
  • 27
5

If the problem are the proxies that exists in the path from client to server, there is nothing you can do but complain to your provider (both client and server).

How HTML5 Web Sockets Interact With Proxy Servers

By using a secure connection, you ensure that no proxy is going to mess with your connection.

vtortola
  • 34,709
  • 29
  • 161
  • 263
5

I was having same issue in .Net Core Web API with Angular 8 front end. The issue in my case was the Websocket protocol was not installed on server. Installed it from Server manager -> Add Roles and Features and it worked

enter image description here

Shahid Iqbal
  • 375
  • 3
  • 5
2

This 400 error can also happen if you are running on multiple servers behind a load balancer. Inspect the body of the 400 response (ex., using Fiddler) and see if you find this: The ConnectionId is in the incorrect format. If so, then your problem may be that you are not using the same machine key on each application server.

See this answer for details on the solution: https://stackoverflow.com/a/43479474/979202

Matt Scully
  • 403
  • 4
  • 9
0

If you're behind Nginx, add these three lines (the ones starting with proxy_):

server {       
    listen       443; # Or 80 or whatever
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    ...
}

HTTPS/HTTP is not the issue. WSS will be automatically used on HTTPS pages, and WS used on HTTP, without any manual setting.

Lionet Chen
  • 832
  • 11
  • 26