我在使用SignalR时遇到了问题,无法使用web sockets。这是一个使用ASP.NET MVC构建的内部网络应用程序。
为了测试,我使用SignalR v2.1.2创建了ASP.NET网站上的简单聊天应用程序。
我将其放在我们的开发服务器之一上(Windows Server 2012,IIS8,.NET 4.5.1),并在Windows 7上使用Chrome。
在Chrome开发工具的网络选项卡中查看,它正在使用ServerSentEvents进行连接。协商调用如下:
我随后将同一应用程序复制到生产服务器上,该服务器再次运行Windows 2012 Server、IIS8和.NET 4.5.1。
这一次,应用程序使用Web Sockets连接,并且协商呼叫如下所示:
由于未知原因,此次 TryWebSockets 的值为 True。
有人能告诉我为什么在第一次尝试时它没有使用 Web Sockets 吗?这可能是 IIS 配置的问题吗?我确保两个实例在其应用程序池中具有相同的设置。
可能是防火墙问题吗?这两个服务器位于网络的不同部分,但我不确定差异在哪里。也许这是路由器问题?
这些应用程序在 Chrome v38 和 IE 11 中进行了测试。
欢迎任何想法/故障排除步骤。
编辑:
好的,我在服务器上启用了跟踪,并在 JavaScript 中遵循了 ASP.NET 网站上的这篇文章。
服务器生成一个传输日志文件,内容如下:
在客户端上,JavaScript控制台中会出现以下内容:
那里有没有任何东西告诉我为什么SignalR没有使用Websockets?
为了测试,我使用SignalR v2.1.2创建了ASP.NET网站上的简单聊天应用程序。
我将其放在我们的开发服务器之一上(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 中遵循了 ASP.NET 网站上的这篇文章。
服务器生成一个传输日志文件,内容如下:
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?