Cas*_*aly 6 iis signalr reactjs asp.net-core
我正在开发一个由 IIS 10 托管的 .Net Core (3.1) Web 应用程序。当我尝试在本地主机上使用 SignalR 时,我能够完全正常连接并从后端接收消息,但是在将其发布到 IIS 后,我收到错误:“服务器返回握手错误:握手已取消。” 在 Chrome 控制台上的客户端日志中,我收到消息:“信息:SSE 连接到http://myserver.com/MyApplication/output”,然后出现上述错误(您可能认为这意味着我连接成功)。 ..
我看过其他帖子,人们建议我必须在 IIS 上启用 webSockets,并且我已经检查过我的网站是否已启用此功能。
我还看到人们建议在创建连接时尝试在 withUrl 函数中使用 longPolling 参数,但这也没有帮助。
我还在 web.config 文件中添加了 SignalR 事件日志跟踪侦听器,我得到的唯一可能与此问题相关的警告是,我从 .NET 运行时收到一条警告,内容为“无法确定 for 的 https 端口”重定向。” 我不确定这意味着什么,或者它是否与 SignalR 有关,但由于这似乎也涉及中间件,因此它可能很重要。
我认为可能相关的一件事是,我的站点只是此服务器上托管的多个站点之一,因此当我在本地运行时,我可以使用以下命令连接到 SignalR:
hubConnection = new signalR.HubConnectionBuilder().withUrl("/output").build();
但由于这个网站在我的服务器上部署的方式,我必须使用这个:
hubConnection = new signalR.HubConnectionBuilder().withUrl("/MyApplication/output").build();
当我部署网站时,否则我会收到 404 错误...
那里会有什么问题吗?我注意到在检查本地主机上的网络请求时,与套接字连接的 URL 是“wss://localhost:44315/output?id=...”,并且我得到“状态代码:101 切换协议”,但是部署后,使用的 url 是“http://myserver.com/MyApplication/output?id=...”,并且在收到顶部描述的错误之前收到“200 OK”。为什么在本地主机上使用 wss,但部署时客户端会请求 http?
Cas*_*aly 14
经过几天的调试终于发现了这个问题...我在本地主机上得到“101”响应而不是在发布时得到“101”响应的原因是因为 101 基本上是服务器(在我的例子中是 IIS)说“我支持 Web 套接字”。我意识到,因为我在发布时没有得到此信息,所以 IIS 中可能未启用 Web 套接字。然而,这很奇怪,因为我进入 IIS 管理器,它说 Web 套接字已启用,但经过更多研究,我发现您还必须进入“服务器管理器”并启用它(请参见此处https: //learn.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support并按照分步说明进行操作)。我没有意识到两者都是必需的。
归档时间: |
|
查看次数: |
11928 次 |
最近记录: |