Запуск Edge.js из проекта ASP.NET MVC
У меня было интересное время, пытаясь запустить Edge.js из проекта ASP.NET MVC. Из документации 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();
}
и это работает без проблем на моей машине. Следующим шагом является создание проекта 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, но это создает исключение BadImageFormat.
Согласно документации Edge.js, "Использование Node.js через Edge.js в веб-приложениях ASP.NET ничем не отличается от консольного приложения.NET". Однако это простейшая возможная реализация в приложении ASP.NET, поэтому должна быть некоторая разница. Согласно предложению в документации, я также попытался скопировать node_modules
подкаталог в bin
папка веб-приложения, но это не помогло.
Любые дальнейшие предложения будут оценены.
1 ответ
Деинсталляция и переустановка пакета Edge.js NuGet исправили это для меня.
Для перехода с IIS Express на IIS вам потребуется установка iisnode.