2013-01-02 124 views
24

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

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

+0

我不使用IIS,但你可以编写自己的服务器(程序),将为你做这个东西。使用websockets,您可以从浏览器连接到任何服务器和端口。 – Zaffy

+0

@Zaffy:谢谢。但是,如果WebSocket不可用,我将失去SignalR的自动回退功能。 – ZeroHackeR

+0

这个答案http://stackoverflow.com/questions/17957949/does-self-hosted-signalr-require-windows-server-2012-in-order-to-use-websockets解释了为什么你不能更详细地其他答案 – wal

回答

-16

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

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

Update the web page that uses SignalR与服务器通信: 添加对json2.js库的引用。 添加一个强制内容以最近的浏览器模式显示的标签。

Set up a Windows Server 2008r2 with IIS 7.5如下: 安装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

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

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

或者作为替代,参考json2.js在CDN :

在页面的头部添加以下标记。此标记(特别是IE =边缘值)强制Internet Explorer在最新版本中显示内容,而不是早期模式(例如IE7),这些模式阻止SignalR代码的运行。

设置的Windows Server 2008 R2和IIS 7.5

如前所述,我建立了从入门SignalR教程.NET 4的样品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确实支持早期传输机制的“自动回退”。

+0

我现在在使用Server 2012.我会在有空的时候尝试。 :) – ZeroHackeR

+8

这个答案没有解决如何在IIS 7.5中使用websockets,只是因为它不可能。 – vtortola

+0

这不是答案! –

39

您不能在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,则无法继续使用该功能。

+0

有没有第三方工具?我在Win 8上开发,但我的服务器在Win Server 2008 R2上。我会检查与托管服务提供商。 – ZeroHackeR

+0

@ZeroHackeR我不知道,但我相信StackExchange使用WebSocket技术,它们在Windows Server 2008 R2上。我不知道他们是如何做到的。此外,这不仅仅是关于你和你的客户浏览器。中间的任何代理也需要支持WebSocket。顺便说一句,很奇怪你的SignalR应用程序总是使用长轮询。我希望它在IE或者其他浏览器中至少使用永久帧。 – tugberk

+1

这是正确的答案,谢谢! – Brunis

4

IIS 8个Express支持WebSockets的New Features

的Windows 7被认为是一个低级别的操作系统,不支持网络套接字。 Known Issues and Limitations

如果您想支持web-sockets,可以升级到Windows 8的时间!