繁体   English   中英

Signalr总是会在生产服务器中进行长时间轮询

[英]Signalr always falls to long polling in the production server

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

有什么可能导致此问题? 怎么调试一样?

如果要在IIS中支持WebSocket,则应启用它

这是您需要启用以使其正常工作的角色/功能的屏幕截图:

WebSocket协议支持

希望对您有所帮助! :)

Microsoft有一篇博客文章,关于如何使SignalR在带有IIS 7.5的Server 2008 R2中工作。 方向可能相似。

  1. 更新SignalR应用程序的web.config文件以启用“为所有请求运行所有托管模块”(简称为RAMMFAR设置)。

    1. 更新使用SignalR与服务器通信的网页

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

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

这是您进行RAMMFAR设置的方法。

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
   </modules>
</system.webServer>

我认为没有必要添加json2.js库引用。 但是,这是您应该放在网页头部的meta标签:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

对于IIS中的应用程序池,请使用集成模式,而不是经典模式。 当然,请使用.NET 4.0。

SignalR基于Web RTC。 Web RTC在浏览器和服务器之间创建持久的TCP连接。 HTTP连接不是持久性的。 每次您的浏览器调用服务器时,它都可以为此请求创建一个新的TCP连接并获得响应。 持久连接对于代理服务器来说是成问题的。 在负载均衡中使用signalR也很困难。 您有多个Web服务器,并且负载均衡器(可以是代理)选择将请求转移到服务器场中的其中一台Web服务器,因此客户端只能连接到您的负载均衡器。

但是:首先检查您的生产Web服务器上是否启用了Web RTC!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM