从C#.Net调用Node.JS

Kam*_*iky 9 c# asp.net node.js edge.js

是否可以在C#ASP.Net服务器上调用Node.js方法/模块?我发现了Edge.JS库,但据我所知,它允许在Node.JS上调用C#代码.我需要直接反向解决方案.

Jer*_*TCD 15

Edge.js 自 2017 年年中以来未更新Microsoft.AspNetCore.NodeServices 已过时

我的组织维护一个库Jering.Javascript.NodeJS,它可以完成 Microsoft.AspNetCore.NodeServices 所做的一切以及更多:

Jering.Javascript.NodeJS 使您能够从 C# 调用 NodeJS 中的 javascript。借助此功能,您可以使用 C# 项目中的 javascript 库和脚本。

示例用法

string javascriptModule = @"
module.exports = (callback, x, y) => {  // Module must export a function that takes a callback as its first parameter
    var result = x + y; // Your javascript logic
    callback(null /* If an error occurred, provide an error object or message */, result); // Call the callback when you're done.
}";

// Invoke javascript in Node.js
int result = await StaticNodeJSService.InvokeFromStringAsync<int>(javascriptModule, args: new object[] { 3, 5 });

// result == 8
Assert.Equal(8, result);
Run Code Online (Sandbox Code Playgroud)

强调

  • 跨平台支持

    • 面向 .NET Standard 2.0 和 .NET Framework 4.6.1。
    • 在 Windows、macOS 和 Linux 上测试。
  • 性能特点

    • 不会为每次调用启动新的 Node.js 进程。相反,通过进程间通信向长期存在的进程发送调用。
    • (可选)在 Node.js 进程集群中同时运行调用。处理集群的负载平衡。
    • 在可能的情况下缓存已编译的 javascript。
  • 长时间运行的应用程序支持

    • 如果 Node.js 进程意外终止,则重新启动它们。
    • (可选)在文件更改时重新启动 Node.js 进程。
    • 当它们的父 .Net 进程终止时杀死 Node.js 进程。
  • 灵活的API

    • 公开静态 API和基于依赖注入的 API。
    • 支持以string表单、Stream表单或从磁盘上的文件调用 javascript 。

  • 每当共享版本发生冲突时,NodeServices Nuget 包以及许多其他包都会从 dotnet/aspnetcore 存储库自动生成。除了项目元数据之外,该包的底层[源代码在过去 10 个月内尚未更新](https://github.com/dotnet/aspnetcore/tree/master/src/Middleware/NodeServices/src)。在存储库中,INodeServices [仍然标记为过时](https://github.com/dotnet/aspnetcore/blob/master/src/Middleware/NodeServices/src/INodeServices.cs),并带有“使用 spa 扩展”警告。 (5认同)

Rob*_*ool 6

Microsoft.AspNetCore.NodeServices

  • 这为.NET代码提供了一种快速而强大的方法,以使其在Node.js环境中的服务器上运行JavaScript。您可以使用它在运行时在ASP.NET Core应用程序中使用NPM软件包中的任意功能。

  • 大多数应用程序开发人员不需要直接使用它,但是如果您要实现自己的功能(涉及在运行时从.NET调用Node.js代码),则可以这样做。

资料来源:https : //github.com/aspnet/JavaScriptServices