ASP.NET MVC 5 アプリケーションと NodeJs (Express+Socket.IO) アプリケーションがあります。ビジネス シナリオでは、NodeJS アプリケーションを MVC アプリケーション内でサブディレクトリとして実行する必要があります。
為に。例えば、
MVC: http://foo.com NodeJS: http://foo.com/node
IISNode(最新バージョン)を使用して、IIS 8 で両方のアプリケーションをホストしました。どちらのアプリケーションも websocket を利用します。Asp.net アプリケーションは、Socket.IO を利用する SignalR と NodeJS を利用します。
問題は、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>
以下は、ソケット io に接続するためのコードです。
self.webSocket = io.connect(serverPath, {
'connect timeout': 10000,
'force new connection': true,
resource: 'node/socket.io'
});
NodeJs アプリケーションからのすべてのファイルが正しく読み込まれますが、どういうわけか websocket に接続できません。