websocket - SignalR 不在 IIS Express 10 上使用 websockets

标签 websocket .net-core iis-express asp.net-core-signalr

我有 .NET Core 2.2 + ASP.NET Core 2.2,里面有 SignalR。在我的开发环境中,我使用的是带有 IIS Express 10 的 Win7。

不幸的是,SignalR 不使用 WebSockets,不幸的是我没有找到强制它这样做的方法。

在服务器端,SignalR 是这样配置的:

app.UseSignalR(
    routeBuilder => routeBuilder
        .MapHub<ClientsHub>(
            "/hubs/clients",
            options => options.Transports = HttpTransportType.WebSockets)
);

在客户端配置是:
this._connection = new signalR.HubConnectionBuilder()
  .withUrl(this.api.getHubUrl(url), {
    transport: HttpTransportType.WebSockets
  })
  .build();

使用以下答案协商来自 SignalR 结果的客户端的请求:
{"connectionId":"1SyteS9TsDE5Q8LBRb2-VA","availableTransports":[]}

因此,SignalR 的客户端将此消息写入控制台:
Error: Failed to start the connection: Error: Unable to initialize any of the available transports.

这显然意味着未使用 websockets 并且 SignalR 无法初始化 websockets。

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

但什么都没有改变。

如果要禁用协商,SignalR 客户端会尝试使用这样的 url 直接使用 WebSockets:
wss://localhost:44360/hubs/clients

但是这个请求的结果是错误代码 400:
Error during WebSocket handshake: Unexpected response code: 400

是否有可能通过 IIS 10 强制 SignalR 使用 WebSockets?
或者强制 IIS 10 允许 SignalR 使用 WebSockets?

最佳答案

我没有回答你的问题,但原因。
Window 7 不支持 IIS Express 的 Web 套接字。 SO 答案 herehere证明它。
但是,如果您使用 Kestrel Web 服务器来运行您的项目,它肯定会在 Window 7 上使用 Web 套接字。我已经在 .NET Core 3.1 和 VS 2019 上构建的项目中测试了相同的内容。
launchSettings.json

关于websocket - SignalR 不在 IIS Express 10 上使用 websockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57641676/

相关文章:

angular - Angular 和 .NET Core 的 SignalR CORS 问题

node.js - 带有 apache 的 Socket.io - 套接字客户端 1 id 在连接客户端 2 时刷新

Django channel 2 : How Many Users Is In The Specific Room

sdk - Microsoft.AspNetCore.App 2.1.1升级 "Blocked by project"

c# - Nlog 从 Appsettings 获取 Azure Blob 存储连接字符串

c# - 无法使用 MSMQ 让 MassTransit 在 IIS Express 上工作

visual-studio-2012 - Visual Studio 2012 IIS Express 8 全新安装 - 无法连接

tomcat - WsOutbound关闭函数导致Tomcat崩溃

asp.net - URL绑定(bind)失败

asp.net-core - 使用 Microsoft.Extensions.DependencyInjection 创建子容器(或隔离范围)的最佳策略