1

我在使用 iisnode 和 node.js 0.10.20 设置在 IIS 7、Windows Server 2008 上运行的 Node.js/ Node-soap服务时遇到一些问题。使用相同代码的相同设置正在内部的另一台服务器上运行并且运行良好。问题是没有记录设置过程,并且安装它的人无法将其迁移到新服务器。而且我对 Node 和 IISnode 没有先验知识。

这是打印的错误消息:

iisnode 在处理请求时遇到错误。

HRESULT:0x2 HTTP 状态:500 HTTP 原因:内部服务器错误您收到此 HTTP 200 响应,因为 system.webServer/iisnode/@devErrorsEnabled 配置设置为“真”。

除了node.exe进程的stdout和stderr的日志,考虑使用debugging和ETW traces来进一步诊断问题。

node.exe进程生成到stderr的最后64k输出如下图所示:

应用程序引发了未捕获的异常并被终止:错误:%1 不是有效的 Win32 应用程序。

\node_modules\soap\node_modules\node-expat\build\Release\node_expat.node

at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (<Path to application>\node_modules\soap\node_modules\node-expat\lib\node-expat.js:4:13)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
  • 我已将以下内容添加到我的 Node.js 文件中:

现在我在网上找到的,试过但没有奏效,如下:

  1. 从这个Stack Overflow question我尝试了两件事:

    • 将此部分添加到我的 Node.js 文件中。

      <iisnode watchedFiles="*.js;node_modules\*;routes\*.js;views\*.jade" nodeProcessCommandLine="\program files\nodejs\node.exe"/>
      
    • 创建了一个符号链接:

      mklink /D "C:\Program Files (x86)\nodejs" "C:\Program Files\nodejs"
      

如果我尝试别的东西会更新。

所有帮助将不胜感激。

更新 1:我已确保Enable32-Bit Applications = False.在 IIS 中设置,并修复了VS 2010 x64 redist二进制文件

4

1 回答 1

1

This error message suggests the bitness of \node_modules\soap\node_modules\node-expat\build\Release\node_expat.node does not match the bitness of the IIS worker process (w3wp.exe). Since you appear to be running IIS with 64 bit worker processes (Enable 32-bit Applications == False), it may indicate that node_expat.node is a 32-bit binary?

于 2013-10-11T16:51:53.463 回答