我在使用iis节点的windows vista / IIS 7中尝试过node.js。我的想法是在asp .net mvc应用程序上使用服务器脚本连接到另一个套接字服务器并以持久方式提供请求。
我为IIS 7下载了https://github.com/tjanczuk/iisnode的iisnode版本,并且能够使用web.config和IIS模块配置中的http处理程序映射运行基本的“hello world”http服务器管道。
我正在尝试使用node.js中的socket.io库。如果我编写服务器和客户端,这可以独立工作。但与IIS节点一起使用时失败。
我有进一步下降的问题。像
这样的问题以前有人试过吗?
答案 0 :(得分:1)
回读a few months ago,IIS下的Socket.IO不支持WebSocket支持,但长轮询是。
这是几个月前的事了,现在我正在遇到同样的问题并试图解决。
Tomasz写道:
请注意,iisnode不支持websocket传输,但是 使用socket.io仍然可以使用其他基于HTTP的传输 像HTTP长轮询:
io.configure(function() {
io.set('transports', ['xhr-polling']);
});
By the looks of it,截至2012年2月23日,此功能仍未受支持。
您需要通过IIS吗?您是否可以选择使用纯Socket.IO/Node选项,从而消除IISNode?如果你需要具有回退功能的完整WebSocket支持,这看起来是唯一的选择,除非有其他建议吗?
答案 1 :(得分:0)
这可能与您的问题有关,也可能与您无关。我没有对socket.io做过多少工作,但是我正在计划做一些与你所描述的非常类似的事情。在阅读iisnode的源代码时,我在cnodehttpmodule.cpp中找到了以下代码:
this->applicationManager->GetEventProvider()->Log(L"iisnode received a new http request", WINEVENT_LEVEL_INFO);
// reject websocket connections since iisnode does not support them
// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17#page-17
PCSTR upgrade = pHttpContext->GetRequest()->GetHeader(HttpHeaderUpgrade, NULL);
ErrorIf(upgrade && 0 == strcmp("websocket", upgrade), ERROR_NOT_SUPPORTED);
在我看来,如果请求的标题中包含“websocket”,它将被拒绝。我需要阅读websocket协议,以便更好地理解这意味着什么。
我是第一个承认我不太清楚websockets与长期运行请求有何不同的人。但是,据我所知,socket.io将适用于不支持websockets的旧浏览器。
我建议您尝试将传输设置为xhr-polling或jsonp-polling。它有点击败了使用node.js的很酷的因素,但它可能有助于你解决问题。
答案 2 :(得分:0)
如果您的socket.io Web应用程序托管在IIS虚拟目录中,则与自托管案例相比,必须修改socket.io配置。有关详细信息,请参阅http://tomasz.janczuk.org/2013/01/hosting-socketio-websocket-apps-in-iis.html。
此外,从版本0.2.x开始,iisnode支持Windows 8和带有IIS 8的Windows Server 2012上的WebSockets。有关详细信息,请查看http://tomasz.janczuk.org/2012/11/how-to-use-websockets-with-nodejs-apps.html。