websocket - SignalR 不在 IIS Express 10 上使用 websocket
问题描述
我有 .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 默认禁用 websocket,我必须先启用它们。我在文件 applicationhost.config 的 IISExpress/config 文件夹中找到了一些设置,并将其设置为允许(默认情况下为拒绝):
<section name="webSocket" overrideModeDefault="Allow" />
但没有任何改变。
如果要禁用协商,SignalR 客户端会尝试直接使用 url 使用 WebSocket,如下所示:
wss://localhost:44360/hubs/clients
但此请求导致错误代码 400:
Error during WebSocket handshake: Unexpected response code: 400
是否有可能通过 IIS 10 强制 SignalR 使用 WebSockets?还是强制 IIS 10 允许 SignalR 使用 WebSockets?
解决方案
推荐阅读
- python - 找出哪个变量导致线性回归中的异常值
- python - 为什么在函数中声明变量要慢得多(对于 jupyter notebook 来说太慢了)
- c# - 使用 Autofac 的应用程序中的多个范围
- python - 在处理上述异常的过程中,又出现了一个异常:& google sheet not found
- postgresql - 在postgresql中将时间戳转换为间隔
- jenkins - 禁用插件 - jenkins 中的“构建完成后删除工作区”
- git - Git 允许/阻止某些文件的提交和推送
- kubernetes - K8S 如何使用 imagePullSecrets 列表处理 POD 定义中的多个远程 docker 注册表
- c# - DateTime.TryParse() 和 DateTime.TryParseExact() 在 linux/macos 上不解析日期并且在 windows 上正常工作
- java - 更正应用程序的类路径,使其包含一个兼容的 oauth2.client.registration.ClientRegistrations 版本