gpt4 book ai didi

.net - SignalR 不使用 Web 套接字

转载 作者:行者123 更新时间:2023-12-04 10:04:01 25 4
gpt4 key购买 nike

我在使用 SignalR 获取站点以实际使用 Web 套接字时遇到问题。它是一个使用 ASP.NET MVC 构建的 Intranet 应用程序。

为了测试,我把 simple chat application from the ASP.NET site 放在一起使用 SignalR v2.1.2。

我把它放在我们的一台开发服务器(Windows Server 2012、IIS8、.NET 4.5.1)上,我在 Windows 7 上使用 Chrome。

查看 Chrome 开发工具的网络选项卡,它与 ServerSentEvents 连接。谈判电话看起来像这样

ConnectionId: "eee14afe-6598-492e-81ae-f14b98041474"
ConnectionTimeout: 110
ConnectionToken: "1iDREVWa++NL0Cj95i++QOufi+1+ywZlY1Tsrv7t06zqca5wn6nvPRLJQOd8/I7EPEaDGabP1MfqhoR/Q2D1vFK6bdujXdFoxGYF XlZ00AHLw9qjDuDgyx3+6a7qXHGFKp6ag6zu4TGuuW9sqM/nkw=="
DisconnectTimeout: 30
KeepAliveTimeout: 20
LongPollDelay: 0
ProtocolVersion: "1.4"
TransportConnectTimeout: 5
TryWebSockets: false
Url: "/Chat/signalr"

然后我将相同的应用程序复制到生产服务器,同样是 Windows 2012 Server、IIS8、NET 4.5.1。

这次应用程序使用 Web Sockets 进行连接,协商调用如下所示:
ConnectionId: "27484ca2-2935-43fd-a6eb-ae13f7fdbd54"
ConnectionTimeout: 110
ConnectionToken: "AhL+5jrvoHa0FXdU+Zg3dJ4a3Avfw28aOZN7raTHpYxUte4GA5Ru9ZmdDZMtCZOFbnpGzOmktY56jH2Tbz+I7g3OO5RnMlBBn8CSg5Il8fb0p/faK1ShGbWhFOKBe9Ns"
DisconnectTimeout: 30
KeepAliveTimeout: 20
LongPollDelay: 0
ProtocolVersion: "1.4"
TransportConnectTimeout: 5
TryWebSockets: true
Url: "/Chat/signalr"

由于未知原因,这次 TryWebSockets 为 True。

谁能告诉我为什么首先它不尝试使用 Web Sockets?会不会是IIS配置?我确保两个实例在它们的应用程序池中具有相同的设置。

会不会是防火墙问题?两台服务器位于网络的不同部分,但我不确定有什么区别。可能是路由器问题?

这些应用程序在 Chrome v38 和 IE 11 中进行了测试。

欢迎任何想法/故障排除步骤。

编辑:

好的,我在服务器上和以下 javascript 中启用了跟踪 this article on the ASP.NET site

服务器生成具有以下内容的传输日志文件:
SignalR.Transports.TransportHeartBeat Information: 0 : Connection 6b0193e6-bde6-4130-b4da-178fd24a786a is New.
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(6b0193e6-bde6-4130-b4da-178fd24a786a)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(6b0193e6-bde6-4130-b4da-178fd24a786a)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(6b0193e6-bde6-4130-b4da-178fd24a786a)
SignalR.Transports.ServerSentEventsTransport Information: 0 : Abort(6b0193e6-bde6-4130-b4da-178fd24a786a)
SignalR.Transports.TransportHeartBeat Information: 0 : Removing connection 6b0193e6-bde6-4130-b4da-178fd24a786a
SignalR.Transports.ServerSentEventsTransport Information: 0 : End(6b0193e6-bde6-4130-b4da-178fd24a786a)
SignalR.Transports.ServerSentEventsTransport Verbose: 0 : DrainWrites(6b0193e6-bde6-4130-b4da-178fd24a786a)
SignalR.Transports.ServerSentEventsTransport Information: 0 : CompleteRequest (6b0193e6-bde6-4130-b4da-178fd24a786a)

在客户端,javascript 控制台中会出现以下内容:
SignalR: Client subscribed to hub 'chathub'. jquery.signalR-2.1.2.min.js:8
SignalR: Negotiating with '/Chat/signalr/negotiate?clientProtocol=1.4&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D'. jquery.signalR-2.1.2.min.js:8
SignalR: Attempting to connect to SSE endpoint 'https://att15web95/Chat/signalr/connect?transport=serverSentEvents&clientPr…mPZV2icA%3D%3D&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&tid=7'. jquery.signalR-2.1.2.min.js:8
SignalR: EventSource connected. jquery.signalR-2.1.2.min.js:8
SignalR: serverSentEvents transport selected. Initiating start request. jquery.signalR-2.1.2.min.js:8
SignalR: The start request succeeded. Transitioning to the connected state. jquery.signalR-2.1.2.min.js:8
SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332 and a connection lost timeout of 20000. jquery.signalR-2.1.2.min.js:8
SignalR: Invoking chathub.Send jquery.signalR-2.1.2.min.js:8
SignalR: Triggering client hub event 'addNewMessageToPage' on hub 'ChatHub'. jquery.signalR-2.1.2.min.js:8
SignalR: Invoked chathub.Send jquery.signalR-2.1.2.min.js:8

有什么可以告诉我为什么 SignalR 不使用 Websockets 的吗?

最佳答案

确保它在开发服务器上启用。

  • 在任务栏上,单击服务器管理器。
  • 在服务器管理器中,单击管理菜单,然后单击添加角色和功能。
  • 在添加角色和功能向导中,单击下一步。选择安装类型,点击下一步。
  • 选择目标服务器并单击下一步。
  • 在“服务器角色”页面上,依次展开 Web 服务器 (IIS)、Web 服务器和应用程序
  • Development,然后选择WebSocket Protocol。点击下一步。
  • 在“选择功能”页面上,单击“下一步”。
  • 在“确认安装选择”页面上,单击“安装”。
  • 在结果页面上,单击关闭。

  • 取自: http://www.iis.net/configreference/system.webserver/websocket

    还要在此之后重置 IIS。

    正如@Luke 指出的那样,您可以使用这一层 powershell
    Install-WindowsFeature -name Web-WebSockets

    关于.net - SignalR 不使用 Web 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26653583/

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