Node.js教程之在Nodejs中如何调用C#的代码
沉沙 2019-05-15 来源 : 阅读 5263 评论 0

摘要:本篇文章探讨了Node.js教程之在Nodejs中如何调用C#的代码,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章探讨了Node.js教程之在Nodejs中如何调用C#的代码,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

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

      本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 2
看完这篇文章有何感觉?已经有2人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved