在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'
});

 

Edgejs官網:

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

 

這里推薦一篇寫的比較詳細的文章:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM