Nic*_*ick 7 .net iis asp.net-mvc websocket signalr
我在使用SignalR实际使用网络套接字时遇到问题.它是使用ASP.NET MVC构建的Intranet应用程序.
为了测试,我使用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"
Run Code Online (Sandbox Code Playgroud)
然后我将同一个应用程序复制到生产服务器,再次是Windows 2012 Server,IIS8,.NET 4.5.1.
这次应用程序使用Web套接字进行连接,协商调用如下所示:
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"
Run Code Online (Sandbox Code Playgroud)
由于未知原因,这次TryWebSockets为True.
任何人都可以告诉我为什么在第一个例子中它不试图使用Web套接字?可能是IIS配置?我确保两个实例在其应用池中具有相同的设置.
可能是防火墙问题?这两台服务器位于网络的不同部分,但我不确定它们之间的区别.也许这是路由器问题?
这些应用已在Chrome v38和IE 11中进行了测试.
欢迎任何想法/解决问题的步骤.
编辑:
好的,我在ASP.NET网站上的本文后面的服务器和javascript中启用了跟踪
服务器生成带有以下内容的传输日志文件:
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)
Run Code Online (Sandbox Code Playgroud)
在客户端上,以下内容出现在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
Run Code Online (Sandbox Code Playgroud)
有没有告诉我为什么SignalR没有使用Websockets?
dov*_*ove 13
确保在开发服务器上启用它.
摘自:http://www.iis.net/configreference/system.webserver/websocket
此后还要重置IIS.
正如@Luke所指出的,你可以使用powershell的这一个衬里
Install-WindowsFeature -name Web-WebSockets
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9342 次 |
| 最近记录: |