为啥 Blazor 使用 post 而不是 WebSockets?

Posted

技术标签:

【中文标题】为啥 Blazor 使用 post 而不是 WebSockets?【英文标题】:Why is Blazor using post instead of WebSockets?为什么 Blazor 使用 post 而不是 WebSockets? 【发布时间】:2021-12-24 23:34:40 【问题描述】:

我有一个 Blazor 服务器应用。当我在 Visual Studio 中运行应用程序时,我在浏览器控制台中看到此消息:

 WebSocket connected to wss://localhost:44329/_blazor?id=HX5t9UdbZwj35PkMxV3Fkw.

所以在我看来 SignalR 正在按预期工作。在“网络”选项卡上,我看到 signalR 按预期工作并显示消息:

但是,现在我将应用程序发布到 IIS。该应用程序运行良好。但是,如果我查看浏览器控制台,我不再看到 WebSocket 正在连接。我在网络选项卡中看到的内容如下所示:

Request URL: https://blazor/_blazor?id=O_acVtnuEIOjlRAosu1YFg
Request Method: POST

其中有很多,例如每秒 1 个。

所以看起来 SignalR 不再被使用了。

这是为什么?我需要做些什么来确保使用 SignalR?

【问题讨论】:

您是否在 IIS 上安装/启用了 websocket 支持? docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/… 我没有,现在我已经更新了服务器以使用 WebSockets。如果您想发布作为答案,我会接受。 【参考方案1】:

确保已在 IIS 上启用 WebSockets。以下是简要概述:

https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support

【讨论】:

以上是关于为啥 Blazor 使用 post 而不是 WebSockets?的主要内容,如果未能解决你的问题,请参考以下文章

Blazor 脚手架注册页面为啥 .cshtml 不是 .razor 文件?

Blazor Web Api 返回 text/html 而不是 application/json

为啥在 Spring Security 的 hasPermission 检查中使用“#post”而不是“post”

为啥是 PRG 模式而不是其他模式?

为啥 Django 的 HTTPResponseRedirect 使用相同的 HTTP 方法进行 PUT 而不是 POST?

为啥 HttpClient.PostAsync 似乎将请求作为 GET 而不是 POST 发送?