当我在服务器中托管应用程序时,它会检查服务器端事件并始终回退到长轮询。服务器托管环境是Windows Server 2012 R1和IIS 7.5
如果我们能解决这个问题,还有吗?
https://cloud.githubusercontent.com/assets/9750273/5050991/2f4cb262-6c59-11e4-9e35-db06b432d470.png
IE10,Chrome 38.0.2125.111和Firefox ..在所有3个浏览器中,我得到长时间轮询,服务器发送的事件被取消。据我所知,他们中很少有人告诉过服务器是否在代理和防火墙后面,然后服务器发送的事件可能无法正常工作。由于该站点在生产服务器中,因此我无法控制它。
导致此问题的可能性有哪些?如何调试相同?
答案 0 :(得分:2)
如果要在IIS中支持WebSocket
,则应该启用它以下是启用此功能所需的角色/功能的屏幕截图:
我希望能帮到你! :)
答案 1 :(得分:0)
Microsoft有一个blog post关于使用IIS 7.5在Server 2008 R2中使用SignalR。方向可能类似。
- 醇>
Update the SignalR application's web.config file启用"为所有请求运行所有托管模块" (简而言之,这就是 RAMMFAR设置)。
- 使用IIS 7.5的
Update the web page that uses SignalR与服务器通信:
- 添加对json2.js库的引用。
- 添加一个标签,强制内容以最近的浏览器模式显示。
Set up a Windows Server 2008r2如下:
- 安装SignalR应用程序所需的.NET Framework版本。
- 创建一个站点并将其与相应的应用程序池关联。
以下是您如何进行RAMMFAR设置。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
我认为没有必要添加json2.js库引用。但是,您应该在网页中放置元标记:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
对于IIS中的应用程序池,请使用集成模式,而不是经典模式。当然,使用.NET 4.0。
答案 2 :(得分:-3)
SignalR基于Web RTC。 Web RTC在浏览器和服务器之间创建持久的TCP连接。 HTTP连接不是持久的。每次浏览器调用服务器时,它都可以为此请求创建新的TCP连接并获得响应。 持久连接对代理服务器来说是有问题的。使用带有负载平衡的signalR也很困难。您有多个Web服务器和一个负载均衡器(可能是代理)选择将您的请求转移到服务器场中的一个Web服务器,因此客户端只能连接到您的负载均衡器。
BUT: 首先检查生产Web服务器上是否启用了Web RTC!