从ASP.NET MVC项目运行Edge.js

我有一个有趣的时间试图从ASP.NET MVC项目运行Edge.js。 在Edge文档中,基本的控制台应用程序是这样的:

public static async Task Start() { var func = Edge.Func(@" return function (data, callback) { callback(null, 'Node.js welcomes ' + data); }"); Console.WriteLine(await func(".NET")); } static void Main(string[] args) { Start().Wait(); } 

这在我的机器上没有问题。 下一步是创build一个ASP.NET MVC项目,并尝试从窗体驱动的控制器操作中运行相同的脚本。 ASP.NET MVC项目默认运行在IIS Express上。

这是控制器:

 public class HomeController : Controller { public ActionResult Index() { return View(); } [HttpPost] public async Task<ActionResult> TestEdge() { try { var func = Edge.Func(@" return function (data, callback) { callback(null, 'Node.js welcomes ' + data); }"); Console.WriteLine(await func(".NET")); return RedirectToAction("Index"); } catch (Exception ex) { Console.WriteLine(ex.GetBaseException().Message); return RedirectToAction("Index"); } } } 

不幸的是,呼叫Edge.Func爆炸。 例外是

 System.DllNotFoundException was unhandled Message: An unhandled exception of type 'System.DllNotFoundException' occurred in EdgeJs.dll Additional information: Unable to load DLL 'node.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 

我在全球安装了Edge(通过npm install edge -g)。

我曾尝试将node.dll文件直接复制到bin文件夹中,但会生成BadImageFormatexception。

根据Edge.js文档,“在ASP.NET Web应用程序中通过Edge.js使用Node.js与.NET控制台应用程序没有区别”。 但是,这是ASP.NET应用程序中最简单的实现,所以必须有一些区别。 根据文档中的build议,我也尝试将node_modules子目录复制到Web应用程序的bin文件夹中,但这没有帮助。

任何进一步的build议将不胜感激。

卸载并重新安装Edge.js NuGet包为我解决了这个问题。

要从IIS Express迁移到IIS,您需要安装iisnode 。