信号机don';不要在IIS Express 10上使用WebSocket

信号机don';不要在IIS Express 10上使用WebSocket,websocket,.net-core,iis-express,asp.net-core-signalr,Websocket,.net Core,Iis Express,Asp.net Core Signalr,我有.NETCore2.2+ASP.NETCore2.2,里面有信号器。在我的开发环境中,我有带IIS Express 10的Win7 不幸的是,signar不使用WebSockets,不幸的是,我没有找到强迫它这么做的方法 在服务器端,SignalR的配置如下: app.UseSignalR( routeBuilder => routeBuilder .MapHub<ClientsHub>( "/hubs/clients",

我有.NETCore2.2+ASP.NETCore2.2,里面有信号器。在我的开发环境中,我有带IIS Express 10的Win7

不幸的是,signar不使用WebSockets,不幸的是,我没有找到强迫它这么做的方法

在服务器端,SignalR的配置如下:

app.UseSignalR(
    routeBuilder => routeBuilder
        .MapHub<ClientsHub>(
            "/hubs/clients",
            options => options.Transports = HttpTransportType.WebSockets)
);
wss://localhost:44360/hubs/clients
用以下答案协商来自信号机结果客户端的请求:

{"connectionId":"1SyteS9TsDE5Q8LBRb2-VA","availableTransports":[]}
因此,Signal的客户端将此消息写入控制台:

Error: Failed to start the connection: Error: Unable to initialize any of the available transports.
这显然意味着不使用WebSocket,Signal无法初始化WebSocket

我发现使用Google时,IIS Express默认禁用了WebSocket,我必须先启用它们。我在applicationhost.config文件的IISExpress/config文件夹中找到了一些设置,并将其设置为允许(默认情况下为拒绝):

但此请求的结果是错误代码400:

Error during WebSocket handshake: Unexpected response code: 400
是否有可能强制IIS 10上的信号器使用WebSocket?
或者强制IIS 10允许Signaler使用WebSockets?

我对你的问题没有答案,但有原因

Windows 7不支持IIS Express的web套接字。答案是肯定的,并证明它是正确的

然而,如果您使用KestrelWebServer来运行您的项目,它肯定会在Windows7上使用WebSockets。我在一个基于.NET Core 3.1和VS 2019构建的项目中进行了同样的测试


我在使用VS2017时也遇到了这个问题。IISExpress基本上忽略了ws://初始连接请求,我看不到任何调试方面表明该请求甚至被听到。但是,当作为独立的Kesteral主机直接针对web项目进行调试时,它运行良好,可以快速升级到wss://。此外,我并没有像你上面提到的那样使用任何武力协议,但我不得不在IISExpress中强制使用SSE。另外请注意,如果相关的话,IIS web主机看起来也不接受ws://连接。您找到解决方案了吗,因为我面临同样的情况
wss://localhost:44360/hubs/clients
Error during WebSocket handshake: Unexpected response code: 400