我有一个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服务器。
答案 0 :(得分:35)
是的,可以像几个人在你的问题评论中指出的那样进行沟通。
这些是(某些)选项:
我建议您选择第一个选项,因为这不需要您定义通过“连线”发送的语言协议。另一个原因是有很多关于使用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数据并处理该数据。
跨平台支持
长期运行的应用程序支持
string
形式,Stream
形式或从磁盘上的文件中调用JavaScript。