c#应用程序可以与Node.js代码通信吗?
本文关键字:代码 通信 js Node 应用程序 | 更新日期: 2023-09-27 18:01:45
我有一个c#应用和一个Node.js应用。我想在我的c#应用程序中按下一个按钮,将三个参数发送到Node.js应用程序/函数作为输入。这可能吗?
Edit:两个应用程序在同一台机器上运行。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
.
我还将提供一个似乎有效的解决方案:
- <
- node . js部分/gh><
- c#部分/gh>
现在你已经准备好从你的c#应用程序发送任何数据到Node.js服务器
是的,就像几个人在你的问题评论中指出的那样,沟通是可能的。
这些是(一些)选项:
- 你的节点进程运行一个http服务器,你的c#应用程序通过http做JSON Rest请求
- 你的节点进程使用node- SOAP/strong-soap模块运行SOAP web服务
- c#应用程序启动你的节点应用程序,你通过写入节点进程的输入流和读取它的输出流来进行IPC。
- 你的节点进程运行一个套接字服务器,你的c#应用程序通过tcp进行请求。
- 你使用第三个进程/服务器,如Redis或消息队列
- 任何允许你共享数据的东西,比如文件。
我建议您选择第一个选项,因为它不需要您定义通过"线路"发送的语言协议。另一个原因是有很多关于使用c#和node.js做Rest的文档。
作为c#中的客户端库,如果你不能使用最新版本的。net(4.5),我建议你看看Restsharp作为客户端库。如果你可以使用最新版本,使用HttpClient调用你的Node.js rest服务。对于Node,只需使用Express。
选项2可能很快,因为VS对web服务有很好的支持,然而,我只使用node-soap作为客户端,所以不能评论node-soap web服务与c#客户端有多好。
手动处理进程间通信非常耗时,而旧的替代方案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);
您可以调用任何有效的Node.js模块,包括执行问题中列出的任务的模块:查询web服务(POST),接收XML数据,并操作该数据。
<亮点/h3>- 跨平台的支持
- 目标。net标准2.0和。net框架4.6.1。
- 已在Windows, macOS和Linux上测试。
性能特性
- 不为每次调用启动一个新的Node.js进程。相反,它通过进程间通信将调用发送给长期存在的流程。
- 可选,在Node.js进程集群中并发运行调用。处理集群的负载平衡。
- 尽可能缓存编译后的javascript。
支持长时间运行的应用程序
- 如果Node.js进程意外终止,则重启该进程。
- 可选,在文件更改时重启Node.js进程。
- 在Node.js进程的父。net进程死亡时杀死Node.js进程。
- 灵活的API
- 公开静态API和基于依赖注入的API。
- 支持以
string
形式、Stream
形式或从磁盘文件调用javascript。
- 目标。net标准2.0和。net框架4.6.1。
- 已在Windows, macOS和Linux上测试。
性能特性
- 不为每次调用启动一个新的Node.js进程。相反,它通过进程间通信将调用发送给长期存在的流程。
- 可选,在Node.js进程集群中并发运行调用。处理集群的负载平衡。
- 尽可能缓存编译后的javascript。
支持长时间运行的应用程序
- 如果Node.js进程意外终止,则重启该进程。
- 可选,在文件更改时重启Node.js进程。
- 在Node.js进程的父。net进程死亡时杀死Node.js进程。
- 公开静态API和基于依赖注入的API。
- 支持以
string
形式、Stream
形式或从磁盘文件调用javascript。