gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:51:37 26 4
gpt4 key购买 nike

我有 .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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com