在Nodejs中如何调⽤C#的代码
最近需要在Nodejs中⽤到C#的代码,从⽹上了解到可以采⽤Edgejs来实现Nodejs与C#的代码交互,
直接复制⽹上的代码运⾏总是出各种错,填了不少坑,现在把⾃⼰的案例代码⼤致整理⼀下,⽅便以后⾃⼰查询。
⼀、安装Edge.js
运⾏命令⾏(CMD),进⼊当前项⽬的⽬录,执⾏命令“npm install edge”进⾏安装。(这⾥也可以选择全局安装,具体操作就不说了)
⼆、调⽤Edge.js
在⽤Edge.js和C#代码交互的时候,有三种⽅式:
1. 第⼀种⽅式是将c#的代码封装成dll,然后在nodejs⾥⾯调⽤
代码⽰例如下:
Nodejs:
// 引⼊Edge模块var edge = require('./node_modules/edge');
// 定义⽅法var StudyMath = edge.func({
assemblyFile: '../../_lib/Rocky.dll', // assemblyFile为dll路径
atypeName: 'RockyNamespace.Study', // RockyNamespace为命名空间,Study为类名
methodName: 'StudyMath' // StudyMath为⽅法名});
// s为传递⽅法传递的参数,result为⽅法返回的结果
StudyMath (s, function (error, result) {
if (error) throw error;
if (0 == result)
; // Success else
; // Failure
});
C#:
namespace RockyNamespace
{
public class Study
{
// C#中,⽅法必须⽤async异步修饰,且返回值必须为Task<object>,其中,input即为⽅法的参数,上⽂的s => input
public async Task<object> StudyMath(object input)
{
// ⽅法体
return0;
}
}
}
2. 第⼆种⽅式是将c#的代码⽤async处理后直接在nodejs中书写:
代码⽰例如下:
Nodejs:
var edge = require('./node_modules/edge');
var StudyMath = edge.func(function () {/*
//using System.Reflection;
using System.Collections.Generic;
async (input) => {
/
/ ⽅法体
return 0;
}
*/});
// s为传递⽅法传递的参数,result为⽅法返回的结果
StudyMath (s, function (error, result) {
if (error) throw error;
if (0 == result)
; // Success
else
; // Failure
});
3. 第三种⽅式是第⼀种和第⼆种的结合
代码⽰例如下:
Nodejs:
var edge = require('./node_modules/edge');
var StudyMath = edge.func(function () {/*
using System.Collections.Generic;
nodejs到底是干嘛用的呢using System.Threading.Tasks;
namespace RockyNamespace
{
public class Startup
{
// C#中,⽅法必须⽤async异步修饰,且返回值必须为Task<object>,其中,input即为⽅法的参数,上⽂的s => input public async Task<object> Invoke(object input)
{
// ⽅法体
return 0;
}
}
}
*/});
// s为传递⽅法传递的参数,result为⽅法返回的结果
StudyMath (s, function (error, result) {
if (error) throw error;
if (0 == result)
; // Success
else
; // Failure
});
需注意的是,采⽤第三种⽅式的时候,必须将类名命名成Startup,⽅法名命名为Invoke,
因为在edge内部中,会默认将typeName定义为Startup,将methodName定义为Invoke
类似如下的定义:
var func= edge.func({
typeName: 'Startup',
methodName: 'Invoke'
});
Edgejs官⽹:
这⾥推荐⼀篇写的⽐较详细的⽂章:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论