在我的IIS 7.5上,我的SignalR应用程序总是使用长轮询。根据我的搜索,IIS 7.5尚不支持WebSockets。
我希望我错过了启用IIS 7.5中的WebSockets的一些工具或配置。或者我没有?
在我的IIS 7.5上,我的SignalR应用程序总是使用长轮询。根据我的搜索,IIS 7.5尚不支持WebSockets。
我希望我错过了启用IIS 7.5中的WebSockets的一些工具或配置。或者我没有?
你不能在IIS 7.5上(也就是Windows Server 2008 R2或Windows 7上)使用WebSocket,因为它需要HTTP.sys级别的更改。因此,你需要使用IIS 8.0和Windows Server 2012或Windows 8组合来利用WebSocket。另外,IIS Express 8.0也支持WebSocket,但如果你使用低于Windows 8或Windows Server 2012的操作系统,则仍无法利用它。
以下是在 Windows 2008r2 上使用 IIS 7.5 托管所需的设置步骤摘要:
更新 SignalR 应用程序的 web.config 文件,以启用“运行所有托管模块以处理所有请求”(简称 RAMMFAR 设置)。
更新使用 SignalR 的网页以与服务器通信: 添加对 json2.js 库的引用。 添加一个标签,强制内容在最新的浏览器模式下显示。
安装IIS 7.5的Windows Server 2008r2如下: 安装您的SignalR应用程序所需的.NET Framework版本。 创建一个站点并将其与适当的应用程序池关联。
更新Signalr应用程序的Web.config文件
在SignalR应用程序的web.config文件中,添加RAMMFAR设置以启用所有请求的所有托管模块运行。这个设置是必需的,以便在Windows 2008r2和IIS 7.5上的所有浏览器中运行SignalR示例应用程序。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
更新使用SignalR的Web页面
在使用SignalR与服务器通信的应用程序Web页面中,添加以下代码。
添加对json2.js JSON解析器库的引用。该脚本为以前没有JSON解析器的浏览器版本提供了一个JSON解析器。您可以通过以下两种方式之一添加脚本: 将NuGet包json2.js添加到您的项目中,然后在Web页面中引用它:
或者作为替代方案,在CDN上引用json2.js:
在页面的head部分添加以下标签。这个标签,特别是IE=edge值,强制Internet Explorer显示最新可用版本的内容,而不是早期模式(如IE7),这些模式会阻止SignalR代码工作。
设置Windows Server 2008r2和IIS 7.5
正如所述,我从.NET 4的SignalR入门教程中构建了示例SignalR应用程序。这是Windows 2008r2和IIS 7.5上常见的托管场景。服务器是一个新的默认安装的Windows Server 2008r2和IIS 7.5。
安装所需的.NET Framework版本。在这种情况下,我安装了.NET Framework 4。
在IIS Manager中创建一个新站点,并将该站点与应用程序池关联。使用集成模式应用程序池,不支持SignalR的经典模式。对于此应用程序,我使用了ASP.NET v4.0应用程序池。
按照上述设置步骤后,我能够将基于.NET Framework 4的Getting Started with SignalR示例部署到服务器,并且它在IE(8、9和10版本)、Chrome和Firefox中完美运行,即使它使用回退传输方法(在IE中为永久帧,在其他浏览器中为服务器发送事件)。对于SignalR开发人员来说,有趣的是除了上述步骤外,我没有在应用程序中的任何SignalR代码中更改一行代码就可以使其工作。
这只是一个简单的案例,但表明SignalR确实支持在服务器上不支持WebSockets支持时自动回退到早期的传输机制。