在Asp.Net MVC应用程序的VirtualDirectory中使用IISNode在IIS内托pipeSocket.IO + ExpressJS应用程序

我有一个ASP.NET MVC 5应用程序和一个NodeJs(Express + Socket.IO)应用程序。 在业务场景中,我必须在MVC应用程序内运行NodeJS应用程序作为子目录。

对于。 例如,

MVC: http : //foo.com NodeJS: http : //foo.com/node

我使用IISNode(最新版本)在IIS 8中托pipe了这两个应用程序。 这两个应用程序都使用websockets。 Asp.net应用程序利用SignalR和NodeJS利用Socket.IO.I已经在https://github.com/tjanczuk/iisnode上提供了相关文档。

问题是当socket.io.js在客户端加载并尝试连接到服务器时,它返回404-Not Found结果。 我已经为Node应用程序的两个应用程序和server.js附加了web.config。 我怀疑问题是与URL重写。

这里是server.js

// Load required modules var http = require("http"); // http server core module var express = require("express"); // web framework external module var io = require("socket.io"); // web socket external module var easyrtc = require("easyrtc"); // EasyRTC external module var request = require("request"); var consolidate = require('consolidate'); var https = require('https'); var fs = require('fs'); var options = {key: fs.readFileSync("easyrtc-key.pem"),cert: fs.readFileSync("easyrtc-cert.pem")}; // Setup and configure Express http server. Expect a subfolder called "static" to be the web root. var httpApp = express(); var webrtcController = require('./app/controllers/webrtcController'); httpApp.route('/rtc/webrtc/index').get(webrtcController.index); httpApp.route('/rtc/webrtc/screensender').get(webrtcController.screenSender); httpApp.route('/rtc/webrtc/screenreceiver').get(webrtcController.screenReceiver); httpApp.use('/rtc',express.static(__dirname + "/static/")); httpApp.engine('html',consolidate['swig']); httpApp.set('view engine', 'html'); httpApp.set('views', './app/views'); // Start Express http server on port 8080 var webServer = http.createServer(httpApp).listen(process.env.PORT || 1234); // Start Socket.io so it attaches itself to Express server var socketServer = io.listen(webServer, {"log level":1}); // Start EasyRTC server var rtc = easyrtc.listen(httpApp, socketServer); 

对于MVC应用程序,web.config是标准的自动生成的configuration文件。

下面是我的Node.js应用程序的web.config。

 <?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <add name="iisnode" path="server.js" verb="*" modules="iisnode" /> </handlers> <rewrite> <rules> <rule name="myapp"> <match url="node/*" /> <action type="Rewrite" url="server.js" /> </rule> </rules> </rewrite> </system.webServer> </configuration> 

下面是连接到socket io的代码。

  self.webSocket = io.connect(serverPath, { 'connect timeout': 10000, 'force new connection': true, resource: 'node/socket.io' }); 

所有来自NodeJs应用程序的文件加载正确,但不知何故,我无法连接到websocket。