信号器总是落在生产服务器中的长轮询中

时间:2014-11-15 12:14:39

标签: c# asp.net signalr signalr-hub server-sent-events

当我在服务器中托管应用程序时,它会检查服务器端事件并始终回退到长轮询。服务器托管环境是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个浏览器中,我得到长时间轮询,服务器发送的事件被取消。据我所知,他们中很少有人告诉过服务器是否在代理和防火墙后面,然后服务器发送的事件可能无法正常工作。由于该站点在生产服务器中,因此我无法控制它。

导致此问题的可能性有哪些?如何调试相同?

3 个答案:

答案 0 :(得分:2)

如果要在IIS中支持WebSocket

,则应该启用它

以下是启用此功能所需的角色/功能的屏幕截图:

WebSocket protocol support

我希望能帮到你! :)

答案 1 :(得分:0)

Microsoft有一个blog post关于使用IIS 7.5在Server 2008 R2中使用SignalR。方向可能类似。

  
      
  1. Update the SignalR application's web.config file启用"为所有请求运行所有托管模块" (简而言之,这就是   RAMMFAR设置)。

         
        
    1. Update the web page that uses SignalR与服务器通信:

           
          
      • 添加对json2.js库的引用。
      •   
      • 添加一个标签,强制内容以最近的浏览器模式显示。
      •   
    2.   使用IIS 7.5的
    3. Set up a Windows Server 2008r2如下:

           
          
      • 安装SignalR应用程序所需的.NET Framework版本。
      •   
      • 创建一个站点并将其与相应的应用程序池关联。
      •   
    4.   
  2.   

以下是您如何进行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!