node.js を使用して Windows Azure Web サイトで新しいプロジェクトを構築することを計画していたときに、SQL Server モジュールに関する問題に遭遇しました。
モジュールのダウンロードされたバイナリを使用しており、例の簡単なコードを使用して、Azure でホストされている SQL Server に接続しています。
var sql = require('node-sqlserver');
var http = require('http');
var conn_str = "Driver={SQL Server Native Client 10.0};Server=tcp:server.database.windows.net,1433;Database=database;Uid=user@server;Pwd=mypass;Encrypt=yes;Connection Timeout=30;";
var port = process.env.port||3000;
http.createServer(function (req, res) {
sql.query(conn_str, "SELECT * FROM testdb.testtable", function (err, results) {
if (err) {
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.write("Got error :-( " + err);
res.end("");
return;
}
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(JSON.stringify(results));
});
}).listen(port);
この例は PC からローカルで動作し、Azure SQL に接続して行を取得できますが、動作させるにはノードを 0.6.19 にダウングレードする必要がありましたが、Azure にデプロイすると失敗します。ウェブサイトにアクセスしようとすると、長い間待った後、次のメッセージが表示されます。
iisnode encountered an error when processing the request.
HRESULT: 0x6d
HTTP status: 500
HTTP reason: Internal Server Error
You are receiving this HTTP 200 response because system.webServer/iisnode/@devErrorsEnabled configuration setting is 'true'.
In addition to the log of stdout and stderr of the node.exe process, consider using debugging and ETW traces to further diagnose the problem.
The node.exe process has not written any information to the stdout or stderr.
node-sqlserver モジュールをソースからコンパイルしようとしましたが、私の PC でも動作し、Azure でも同じ結果になりました。また、モジュール バイナリがデプロイされることも確認しました (デプロイには git を使用しています)。
何か案は?