Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 带有React的信号器IIS-“;服务器返回握手错误:握手已取消;_Reactjs_Asp.net Core_Iis_Signalr - Fatal编程技术网

Reactjs 带有React的信号器IIS-“;服务器返回握手错误:握手已取消;

Reactjs 带有React的信号器IIS-“;服务器返回握手错误:握手已取消;,reactjs,asp.net-core,iis,signalr,Reactjs,Asp.net Core,Iis,Signalr,我正在开发一个用IIS10托管的.NETCore(3.1)web应用程序。当我尝试在本地主机上使用SignalR时,我能够完全正常连接并从后端接收消息,但在我将其发布到IIS后,我收到错误:“服务器返回握手错误:握手被取消。”在Chrome控制台上的客户端日志中,我收到消息:“信息:在我收到上述错误之前,SSE已连接到(您认为这意味着我已成功连接) 我看过其他帖子,有人建议我必须在IIS上启用WebSocket,我已经检查了我的网站是否启用了WebSocket 我还看到有人建议在创建连接时尝试在

我正在开发一个用IIS10托管的.NETCore(3.1)web应用程序。当我尝试在本地主机上使用SignalR时,我能够完全正常连接并从后端接收消息,但在我将其发布到IIS后,我收到错误:“服务器返回握手错误:握手被取消。”在Chrome控制台上的客户端日志中,我收到消息:“信息:在我收到上述错误之前,SSE已连接到(您认为这意味着我已成功连接)

我看过其他帖子,有人建议我必须在IIS上启用WebSocket,我已经检查了我的网站是否启用了WebSocket

我还看到有人建议在创建连接时尝试在withUrl函数中使用longPolling参数,但这也没有帮助

我还将SignalR事件日志跟踪侦听器添加到我的web.config文件中,我得到的唯一可能与此问题相关的警告是,我从.NET运行时收到一条警告,内容为“无法确定用于重定向的https端口”。我不确定这意味着什么,或者它是否与SignalR相关,但由于这似乎也涉及到中间件,因此可能意义重大

我认为可能与此相关的一点是,我的站点只是此服务器上托管的多个站点之一,因此当我在本地运行时,我可以使用以下连接到SignalR:

hubConnection=new signar.HubConnectionBuilder().withUrl(“/output”).build()

但由于在我的服务器上部署此站点的方式,我必须使用以下方法:

hubConnection=new signar.HubConnectionBuilder().withUrl(“/MyApplication/output”).build()

当我部署站点或其他我得到一个404错误


有什么问题吗?我注意到,在本地主机上检查网络请求时,连接套接字的URL为“wss://localhost:44315/output?id=...我得到了“状态代码:101交换协议”,但在我部署之后,使用的url是http://myserver.com/MyApplication/output?id=...我得到一个“200好”在收到顶部描述的错误之前。为什么在本地主机上使用wss,但在我部署时从我的客户端请求http?

经过几天的调试,终于发现了这个问题。。。我之所以在localhost上得到“101”响应,而不是在发布时得到,是因为101基本上是服务器(在我的例子中是IIS),它说“我支持web套接字”。我意识到,因为我在发布时没有得到这些信息,所以IIS中可能没有启用web套接字。然而,这很奇怪,因为我进入了IIS管理器,它说启用了web套接字,但经过更多的研究,我发现您还必须进入“服务器管理器”并启用它(请参见此处并遵循逐步说明)。我没有意识到这两个都是必需的。

关于一般类似这种网络问题,数据传输被中断,我建议您使用一些工具,如fiddler来捕获网络数据包和流量包。获得这些数据包后,分析其中的数据,找出中断点和原因。