C#应用程序可以与Node.js代码通信吗?

Ger*_*ero 31 c# node.js

我有一个C#应用程序和一个Node.js应用程序.我想在我的C#应用​​程序中按一个按钮,将三个参数作为输入发送到Node.js应用程序/函数.这可能吗?

编辑:两个应用程序在同一台机器上运行.C#应用程序将为Node.js应用程序提供三个参数.Node.js应用程序将查询Web服务(POST),接收一些XML数据并操纵该数据.我知道我也可以在C#中完成这项任务,但在这种情况下它必须是Node.js.

编辑#2和解决方案:现在我选择了:4. Your node process runs a socket server and your C# app does requests over tcp.

我还将提供似乎有效的解决方案:

现在您已准备好将C#应用程序中的任何数据发送到Node.js服务器.

And*_*dyD 38

是的,可以像几个人在你的问题评论中指出的那样进行沟通.

这些是(某些)选项:

  1. 您的节点进程运行http服务器,您的C#应用​​程序通过http执行JSON Rest请求
  2. 您的节点进程使用node-soap模块运行SOAP Web服务
  3. C#app启动你的节点应用程序,你通过写入节点进程输入流并读取它的输出流来进行IPC.
  4. 您的节点进程运行套接字服务器,您的C#应用​​程序通过tcp执行请求.
  5. 您使用第三个进程/服务器,如Redis或Message Queue
  6. 任何允许您共享文件等数据的东西..

我建议你选择第一个选项,因为这不需要你定义一个语言协议来通过"线"发送.另一个原因是有很多关于使用C#和node.js进行Rest的文档.

作为C#中的客户端库,如果您不能使用最新版本的.NET(4.5),我建议您查看Restsharp作为客户端库.如果您可以使用最新版本,请使用HttpClient来调用Node.js restservice.对于Node,只需使用Express.

选项2可能很快,因为VS对webservices有很好的支持,但是,我只使用node-soap作为客户端,因此无法评论node-soap webservices与C#客户端的关系.

  • 你可以使用任何形式的IPC连接两个进程,无论是nodejs app还是你的C#app,或者它可以是任何这样的场景.你也可以看看http://tjanczuk.github.io/edge/#/ (2认同)

Jer*_*TCD 6

手动处理进程间通信非常耗时,而旧的替代方案 Edge.js自 2017 年中期以来一直没有更新

我的组织维护一个库Jering.Javascript.NodeJS,它允许您从 C# 调用 Node.js。

用法示例

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)

您可以调用任何有效的 Node.js 模块,包括执行问题中列出的任务的模块:查询 Web 服务 (POST)、接收 XML 数据以及操作该数据。

强调

  • 跨平台支持

    • 面向 .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 。