[英]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,则应启用它
这是您需要启用以使其正常工作的角色/功能的屏幕截图:
希望对您有所帮助! :)
Microsoft有一篇博客文章,关于如何使SignalR在带有IIS 7.5的Server 2008 R2中工作。 方向可能相似。
更新SignalR应用程序的web.config文件以启用“为所有请求运行所有托管模块”(简称为RAMMFAR设置)。
更新使用SignalR与服务器通信的网页 :
- 添加对json2.js库的引用。
- 添加一个标签,以强制内容以最近的浏览器模式显示。
设置具有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.