SignalR 连接不会启动到 IIS 托管的应用程序

Squ*_*ler 2 c# iis signalr asp.net-core

我制作了一个应用程序,并尝试通过 SignalR 连接到后端。

ASP.NET Core 3.1 后端托管在 IIS 中,以便于开发。

在客户端上调用 StartAsync 方法成功协商,但随后在 GET 上永远挂起:

GET http://localhost:81/signalr?id=W3F2TRVrx_lxZoinHzTzmA
Run Code Online (Sandbox Code Playgroud)

StartAsync() 调用无法返回。

这仅发生在 IIS 上。当我启动自托管应用程序时,它可以工作。

WebAPI 的其余部分也适用于 IIS。只是 SignalR 不会连接。

知道为什么吗?我发现相当 一个 问题和答案在这里,但他们没有真正解决这个问题的准确。

Squ*_*ler 5

所以我实际上自己找到了答案:

默认情况下,IIS 上未启用 Websocket 支持。它是在 IIS 8 中引入的,必须从 Windows 的可选功能中启用:https : //docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis- 80-websocket-protocol-support

可选功能 -> IIS -> WWW 服务 -> App Dev Features -> Websocket 协议

  • services.AddSignalR(),当我使用 Visual Studio 2017 运行时它可以工作,所以当我部署到 Window Server 2016 上的 IIS 时它不起作用 (2认同)