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

时间:2013-02-28 13:37:28

标签: 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服务器。

2 个答案:

答案 0 :(得分:35)

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

这些是(某些)选项:

  1. 您的节点进程运行http服务器,您的C#应用​​程序通过http
  2. 执行JSON Rest请求
  3. 您的节点进程使用node-soap模块
  4. 运行SOAP Web服务
  5. C#app启动你的节点应用程序,你通过写入节点进程输入流并读取它的输出流来进行IPC。
  6. 您的节点进程运行套接字服务器,您的C#应用​​程序通过tcp执行请求。
  7. 您使用Redis或Message Queue等第三个流程/服务器
  8. 允许您共享文件等数据的任何内容..
  9. 我建议您选择第一个选项,因为这不需要您定义通过“连线”发送的语言协议。另一个原因是有很多关于使用C#和node.js进行Rest的文档。

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

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

答案 1 :(得分:2)

手动处理进程间通信非常耗时,而Edge.js,has not been updated since mid 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);

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

要点

  • 跨平台支持

    • 定位.NET Standard 2.0和.NET Framework 4.6.1。
    • 在Windows,macOS和Linux上进行了测试。
  • Performance功能

    • 不为每次调用启动新的Node.js进程。而是通过进程间通信将调用发送到寿命长的进程。
    • (可选)在Node.js进程集群中运行调用concurrently。处理群集的负载平衡。
    • 尽可能缓存已编译的javascript。
  • 长期运行的应用程序支持

    • 如果Node.js进程意外终止,请重新启动。
    • (可选)在文件更改时重新启动Node.js进程。
    • 杀死其父.Net进程终止时杀死Node.js进程。
  • Flexible API

    • 同时公开static API和基于依赖项注入的API。
    • 支持以string形式,Stream形式或从磁盘上的文件中调用JavaScript。