最近需要在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)
; // Successelse
; // Failure
});

C#:

namespace RockyNamespace
{
public class Study
{
// C#中,方法必须用async异步修饰,且返回值必须为Task<object>,其中,input即为方法的参数,上文的s => input
public async Task<object> StudyMath(object input)
{
// 方法体
return ;
}
}
}
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;
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官网:

http://tjanczuk.github.io/edge/#/

这里推荐一篇写的比较详细的文章:

http://blog.csdn.net/kimmking/article/details/42708049

在Nodejs中如何调用C#的代码的更多相关文章

  1. PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码

    PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...

  2. 新西达电调初始化代码,使用nodejs ffi技术调用wiringpi,代码使用typescript编写

    这是我设计的F450四轴飞行器飞控代码的一部分 运行在orangepi-zero上,操作系统是armbian,思路是使用node-ffi调用wiringpi的so库与GPIO通信,然后控制端逻辑代码使 ...

  3. java中方法调用

    JAVA中方法的调用[基础] 一.调用本类中的方法 方法一.被调用方法声明为static ,可以在其他方法中直接调用.示例代码如下: public class HelloWord { /** * @p ...

  4. FreeSWITCH IVR中lua调用并执行nodejs代码

    一.功能需求: 通过FreeSWITCH的IVR按键调用相应的脚本文件:nodejs提供很多的模组,可以方便的与其它系统或者进行任何形式的通讯,我的应用是通过nodejs发送http post请求: ...

  5. C代码中如何调用C++ C++中如何调用C

    注意这里的C调用C++或者C++调用C意思是.c文件中调用.cpp文件中代码,或者相反. 集成开发环境如VC++6.0或者vs都是以文件后缀来区别当前要编译的是C代码还是C++代码,然后采用响应的编译 ...

  6. 在Java中直接调用js代码(转载)

    http://blog.csdn.net/xzyxuanyuan/article/details/8062887 JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Ja ...

  7. 在Java中直接调用js代码

    JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert ...

  8. c代码中调用c++,c++代码中调用c代码

    注意这里的c调用c++或者c++调用c的意思是.c文件中调用.cpp文件中的代码,或者相反 集成开发环境如vc++6.0或者vs都是通过文件后缀来区别当前要编译的是C代码还是C++代码,然后采用相应的 ...

  9. 如何在python中调用C语言代码

    1.使用C扩展CPython还为开发者实现了一个有趣的特性,使用Python可以轻松调用C代码 开发者有三种方法可以在自己的Python代码中来调用C编写的函数-ctypes,SWIG,Python/ ...

随机推荐

  1. BZOJ 4390: [Usaco2015 dec]Max Flow

    4390: [Usaco2015 dec]Max Flow Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 113[Submi ...

  2. Java开发环境搭建——Idea开发环境

    Idea版本选择由于公司使用JDK7,所以我选择安装Version 2016.1.4(手动安装试验出来的,最新版的2016.1.4启动时提示需要安装JDK8)下载 其实可以安装多个版本的JDK,然后指 ...

  3. Jackson 通过自定义注解来控制json key的格式

    Jackson 通过自定义注解来控制json key的格式 最近我这边有一个需求就是需要把Bean中的某一些特殊字段的值进行替换.而这个替换过程是需要依赖一个第三方的dubbo服务的.为了使得这个转换 ...

  4. ionic 发布 inoc显示不正确

    前两天因为学习的问题,把本地环境给搞崩了,然后重新安装环境之后发现生成的安装包不能使用,然后找了很多原因都不能解决,因为之前发布ios的时候使用命令 ionic resources的时候就可以将图标显 ...

  5. .NET FRAMEWORK版本:4.0.30319; ASP.NET版本:4.6.118.0

    https://gqqnbig.me/2015/11/23/net-framework%e7%89%88%e6%9c%ac4-0-30319-asp-net%e7%89%88%e6%9c%ac4-6- ...

  6. margin()与offset()的区别

    margin() 简写属性在一个声明中设置所有外边距属性. offset() 方法返回或设置匹配元素相对于文档的偏移(位置).

  7. Java中如何把一下字符串转换成map

    首先,你先确认你的字符串是否是json格式的,如果是json格式,那你可以使用Gson.jar或json-lib-xx-jdk.jar两个包来自动解析解析. 使用Gson更简单些,只需要导入一个包就可 ...

  8. JS中SetTimeOut和SetInterval方法的区别?

    1.setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭.由 ...

  9. 第一章 Part 1/2 Git 一览

    虽然这个系列的文章主要关注的是Github,然而首先了解下Git的基本概念和名词也是非常有帮助的. 工作目录(Working Directory) 工作目录是你个人计算机上的一个目录.在该目录下,每一 ...

  10. VBA笔记(三)——常用对象

    VBA实际上就是操作Excel,把Excel进行拆解,划分多层对象,由顶至下为(也可以说是层层包裹): Application:代表Excel程序本性,之后我们操作对象都在它之下,因为是唯一且至高点, ...