IIS 7.5上的SignalR WebSockets

Zer*_*keR 24 real-time iis-7.5 websocket signalr

在我的IIS 7.5上,我的SignalR应用程序总是使用长轮询.根据我的搜索,IIS 7.5尚不支持WebSockets.

我希望,我错过了一些工具或配置来启用IIS 7.5中的WebSockets.或者我没有?

tug*_*erk 44

您不能在IIS 7.5上使用WebSocket(换句话说,在Windows Server 2008 R2或Windows 7上),因为它需要HTTP.sys级别更改AFAIK.因此,您需要IIS 8.0和Windows Server 2012或Windows 8组合来利用WebSocket.此外,IIS Express 8.0也支持WebSockect,但如果您的操作系统低于Windows 8或Windows Server 2012,则无法继续使用它.


Giu*_*ppe -19

以下是在带有 IIS 7.5 的 Windows 2008r2 上托管所需的设置步骤的摘要:

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

更新使用 SignalR 与服务器通信的网页:添加对 json2.js 库的引用。添加一个标签,强制内容在最近的浏览器模式下显示。

按如下方式设置带有 IIS 7.5 的 Windows Server 2008r2: 安装 SignalR 应用程序所需的 .NET Framework 版本。创建一个站点并将其与适当的应用程序池关联。

更新 Signalr 应用程序的 Web.config 文件

在 SignalR 应用程序的 web.config 文件中,添加 RAMMFAR 设置以启用针对所有请求运行所有托管模块。需要此设置才能使 SignalR 示例应用程序在 Windows 2008r2 和 IIS 7.5 上的所有浏览器中运行。

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
   </modules>
</system.webServer> 
Run Code Online (Sandbox Code Playgroud)

更新使用SignalR的网页

在使用SignalR与服务器通信的应用程序网页中,添加以下代码。

添加对 json2.js JSON 解析器库的引用。该脚本为以前没有的浏览器版本提供了 JSON 解析器。您可以通过以下两种方式之一添加脚本: 将 NuGet 包 json2.js 添加到项目中,然后在网页中引用它:

或者作为替代方案,参考 CDN 上的 json2.js:

在页面的头部添加以下标签。此标记(特别是 IE=edge 值)强制 Internet Explorer 以最新可用版本显示内容,而不是阻止 SignalR 代码工作的早期模式(例如 IE7)。

设置 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 管理器中创建一个新站点,并将该站点与应用程序池关联。使用集成模式应用程序池,SignalR 不支持经典模式。对于此应用程序,我使用了 ASP.NET v4.0 应用程序池。

遵循上述设置步骤后,我能够将基于 .NET Framework 4 的 SignalR 入门示例版本部署到服务器,并且它在 IE(版本 8、9 和 10)、Chrome 和Firefox 即使它使用后备传输方法(IE 中的永久帧,以及其他浏览器中的服务器发送事件)。对于 SignalR 开发人员来说,有趣的是,除了上述步骤之外,我无需在应用程序中的任何位置更改任何一行 SignalR 代码即可完成这项工作。

这是一个简单的案例,但表明当服务器上不提供 websockets 支持时,SignalR 确实支持“自动回退”到早期的传输机制。

  • 这个答案没有解决如何在 IIS 7.5 中使用 websockets,因为这是不可能的。 (9认同)
  • 我不敢相信,在我意识到他在回避这个问题之前,我读了一半的废话。可惜它被标记为答案。 (2认同)