web-dev-qa-db-ja.com

C#.NETからNode.jsを呼び出す

C#ASP.NETサーバーからNode.js関数を呼び出すことはできますか? Edge.jsライブラリを見つけましたが、理解したとおり、Node.jsがC#を呼び出すことができます。直接逆の解決策が必要です。

14
Kamiky

Microsoft.AspNetCore.NodeServices

  • これにより、.NETコードがNode.js環境内のサーバーでJavaScriptを実行するための高速で堅牢な方法が提供されます。これを使用して、ASP.NET Coreアプリの実行時にNPMパッケージの任意の機能を利用できます。

  • ほとんどのアプリケーション開発者はこれを直接使用する必要はありませんが、実行時に.NETからNode.jsコードを呼び出すことを含む独自の機能を実装する場合は、これを使用できます。

ソース: https://github.com/aspnet/JavaScriptServices

5
Robert Claypool

2017年半ば以降、Edge.jsは更新されていません および Microsoft.AspNetCore.NodeServicesは廃止されました

私の組織では、ライブラリ Jering.Javascript.NodeJS を維持しています。これは、Microsoft.AspNetCore.NodeServicesが行ったすべてのことを実行します。

Jering.Javascript.NodeJSを使用すると、C#からNodeJSでJavaScriptを呼び出すことができます。この機能により、C#プロジェクトのJavaScriptライブラリとスクリプトを使用できます。

使用例

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);

ハイライト

  • クロスプラットフォームのサポート

    • .NET Standard 2.0および.NET Framework 4.6.1をターゲットにします。
    • Windows、macOS、Linuxでテスト済み。
  • パフォーマンス 機能

    • 呼び出しごとに新しいNode.jsプロセスを開始しません。代わりに、プロセス間通信を介して、長期間有効なプロセスに呼び出しを送信します。
    • オプションで、Node.jsプロセスのクラスターで呼び出し concurrently を実行します。クラスターの負荷分散を処理します。
    • コンパイルされたJavaScriptを可能な限りキャッシュします。
  • 長期実行アプリケーションのサポート

    • Node.jsプロセスが予期せず終了した場合に再起動します。
    • オプションで、ファイルの変更時にNode.jsプロセスを再起動します。
    • 親の.Netプロセスが停止したときにNode.jsプロセスを強制終了します。
  • フレキシブルAPI

    • 静的API と依存関係注入ベースのAPIの両方を公開します。
    • string形式、Stream形式、またはディスク上のファイルからのJavaScriptの呼び出しをサポートします。
2
JeremyTCD

'express'を使用してノードアプリでhttpメソッドを公開し、 'RestSharp'/'HttpClient'を使用して呼び出すだけです

0
Nahum