3

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

为了。例如,

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

我使用 IISNode(最新版本)在 IIS 8 中托管了这两个应用程序。两个应用程序都使用 websockets。Asp.net 应用程序利用了 SignalR 和 NodeJS,利用了 Socket.IO。我遵循了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 是标准的自动生成的配置文件。

下面是我的 NodeJs 应用程序的 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。

4

0 回答 0