Запуск 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.

Другие вопросы по тегам