gpt4 book ai didi

reactjs - 带有 React 的 SignalR IIS - "Server returned handshake error: Handshake was canceled."

转载 作者:行者123 更新时间:2023-12-04 13:12:16 30 4
gpt4 key购买 nike

我正在开发一个由 IIS 10 托管的 .Net Core (3.1) Web 应用程序。当我尝试在本地主机上使用 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 交换协议(protocol)”,但是部署后,使用的 url 是“http://myserver.com/MyApplication/output?id=...”,在收到顶部描述的错误之前,我收到“200 OK”。为什么 wss 在本地主机上使用,但在我部署时从我的客户端请求 http?

最佳答案

经过几天的调试终于发现了这个问题......我在本地主机上得到“101”响应而不是发布时的原因是因为101基本上是服务器(在我的例子中是IIS)说“我支持Web套接字”。我意识到因为我在发布时没有得到这个,所以可能没有在 IIS 中启用 Web 套接字。然而,这很奇怪,因为我进入 IIS 管理器并说启用了 Web 套接字,但经过更多研究,我发现您还必须进入“服务器管理器”并启用它(参见此处 https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support 和按照分步说明进行操作)。我没有意识到两者都是必需的。

关于reactjs - 带有 React 的 SignalR IIS - "Server returned handshake error: Handshake was canceled.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64001122/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com