【发布时间】:2021-01-08 01:42:10
【问题描述】:
我正在开发一个使用 IIS 10 托管的 .Net Core (3.1) Web 应用程序。当我尝试在 localhost 上使用 SignalR 时,我能够完全正常连接并从后端接收消息,但在我将其发布到IIS,我收到错误:“服务器返回握手错误:握手被取消。”在 Chrome 控制台上的客户端日志中,我收到消息:“信息:在我收到上述错误之前,SSE 已连接到http://myserver.com/MyApplication/output"(您会认为这意味着我连接成功)...
我看到其他帖子有人建议我必须在 IIS 上启用 webSockets,我已经检查了我的网站是否启用了此功能。
我还看到有人建议在创建连接时尝试在 withUrl 函数中使用 longPolling 参数,但这也没有帮助。
我还在我的 web.config 文件中添加了 SignalR 事件日志跟踪侦听器,我得到的唯一可能与此问题相关的警告是我从 .NET 运行时收到警告,内容为“无法确定用于重定向的 https 端口。”我不确定这意味着什么,或者它是否与 SignalR 有关,但由于这似乎也涉及中间件,因此它可能很重要。
我认为可能相关的一件事是,我的站点只是此服务器上托管的多个站点之一,因此当我在本地运行时,我可以使用以下连接到 SignalR:
hubConnection = new signalR.HubConnectionBuilder().withUrl("/output").build();
但是由于这个站点部署在我的服务器上的方式,我不得不使用这个:
hubConnection = new signalR.HubConnectionBuilder().withUrl("/MyApplication/output").build();
当我部署站点时,否则我会收到 404 错误...
会有什么问题吗?我注意到在检查 localhost 上的网络请求时,与套接字连接的 URL 是“wss://localhost:44315/output?id=...”并且我得到“状态代码:101 切换协议”,但是部署后,使用的 url 是“http://myserver.com/MyApplication/output?id=...”,并且在收到顶部描述的错误之前我得到“200 OK”。为什么 wss 在 localhost 上使用,但我在部署时从客户端请求 http?
【问题讨论】:
-
关于一般像这种网络问题,数据传输中断,建议你使用fiddler之类的工具来抓取网络数据包和流量包。拿到这些包后,分析其中的数据,找出中断的点和原因。
标签: reactjs asp.net-core iis signalr