C# クライアントの作成
この例では、MATLAB® Production Server™ にデプロイされた MATLAB 関数を呼び出すための C# アプリケーションを記述する方法を説明します。この C# アプリケーションは MATLAB Production Server の .NET クライアント ライブラリを使用します。
このタスクは通常、.NET アプリケーション プログラマが行います。チュートリアルでは、Microsoft® Visual Studio® と .NET がコンピューターにインストールされているものと仮定しています。
Microsoft Visual Studio プロジェクトの作成
Microsoft Visual Studio を開きます。
[ファイル]、[新規作成]、[プロジェクト] をクリックします。
[新規プロジェクト] ダイアログ ボックスで、使用するテンプレートを選択します。たとえば、Visual Studio 2017 で C# コンソール アプリケーションを作成する場合、左側のナビゲーション ペインで [Visual C#]、[Windows デスクトップ] を選択し、その後 [コンソール アプリ (.NET Framework)] を選択します。
[名前] フィールドにプロジェクトの名前を入力します (たとえば
Magic)。[OK] をクリックします。
Magicソース シェルが作成され、既定では、通常Program.csと命名されます。
クライアント ランタイム ライブラリへの参照の作成
Magic プロジェクトで MATLAB Production Server クライアント ランタイム ライブラリへの参照を作成します。Microsoft Visual Studio で、以下の手順を実行します。
Microsoft Visual Studio の [ソリューション エクスプローラー] ペイン (通常は右側) で、
Magicプロジェクトを右クリックして、[追加]、[参照] を選択します。MATLAB Production Server の .NET クライアント ランタイム ライブラリがある場所を参照します。
オンプレミスの MATLAB Production Server インストールでは、ライブラリは
にあります。ここで、$MPS_INSTALL\client\dotnetは MATLAB Production Server がインストールされている場所です。$MPS_INSTALLMathWorks.MATLAB.ProductionServer.Client.dllファイルを選択します。クライアント ライブラリは
https://www.mathworks.com/products/matlab-production-server/client-libraries.htmlでダウンロードすることもできます。[OK] をクリックします。これで、Microsoft Visual Studio プロジェクトは
MathWorks.MATLAB.ProductionServer.Client.dllを参照するようになりました。
サーバーへの MATLAB 関数のデプロイ
関数 magic (MATLAB) を使用して魔方陣を作成する MATLAB 関数 mymagic を作成し、mymagic を mymagic_deployed というデプロイ可能なアーカイブにパッケージ化してから、サーバーにデプロイします。関数 mymagic は単一の int 入力を受け取り、魔方陣を 2 次元の double 配列として返します。この例は、サーバー インスタンスが http://localhost:9910 で実行されていることを前提としています。
function m = mymagic(in)
m = magic(in);
アーカイブの作成およびサーバーへのデプロイの詳細については、MATLAB Production Server 用のデプロイ可能なアーカイブの作成およびMATLAB Production Server へのアーカイブのデプロイを参照してください。
.NET インターフェイスの C# での設計
デプロイされた MATLAB 関数 mymagic を .NET クライアントから .NET インターフェイス経由で呼び出します。MATLAB 関数 mymagic と一致するように C# インターフェイス Magic を設計します。
.NET インターフェイスには、MATLAB 関数と同じ数の入力および出力がある。
デプロイする MATLAB 関数は 1 つでるため、C# コードでは対応する .NET メソッドを 1 つ定義する。
MATLAB 関数と .NET インターフェイスの両方が同じデータ型 (入力の型は
int、出力の型は 2 次元のdouble) を処理する。C# クライアント プログラムでは、インターフェイス
Magicを使用してCreateProxyメソッドでプロキシ オブジェクトの参照タイプを指定する。CreateProxyメソッドには、入力引数として、関数mymagicを含むデプロイ可能なアーカイブの URL (http://localhost:9910/mymagic_deployed) が必要です。
public interface Magic
{
double[,] mymagic(int in1);
}
.NET アプリケーションの記述、ビルド、および実行
以前に作成した Microsoft Visual Studio プロジェクト
Magicを開きます。Program.csタブで、以下のコードを貼り付けます。using System; using System.Net; using MathWorks.MATLAB.ProductionServer.Client; namespace Magic { public class MagicClass { public interface Magic { double[,] mymagic(int in1); } public static void Main(string[] args) { MWClient client = new MWHttpClient(); try { Magic me = client.CreateProxy<Magic> (new Uri("http://localhost:9910/mymagic_deployed")); double[,] result1 = me.mymagic(4); print(result1); } catch (MATLABException ex) { Console.WriteLine("{0} MATLAB exception caught.", ex); Console.WriteLine(ex.StackTrace); } catch (WebException ex) { Console.WriteLine("{0} Web exception caught.", ex); Console.WriteLine(ex.StackTrace); } finally { client.Dispose(); } Console.ReadLine(); } public static void print(double[,] x) { int rank = x.Rank; int[] dims = new int[rank]; for (int i = 0; i < rank; i++) { dims[i] = x.GetLength(i); } for (int j = 0; j < dims[0]; j++) { for (int k = 0; k < dims[1]; k++) { Console.Write(x[j, k]); if (k < (dims[1] - 1)) { Console.Write(","); } } Console.WriteLine(); } } } }プロキシの作成に使用される URL の値 (
"http://localhost:9910/mymagic_deployed") には、3 つの部分が含まれています。サーバー アドレス (
localhost)。ポート番号 (
9910)。アーカイブ名 (
mymagic_deployed)。
アプリケーションをビルドします。[ビルド]、[ソリューションのビルド] をクリックします。
アプリケーションを実行します。[デバッグ]、[デバッグなしで開始] をクリックします。プログラムから、次のコンソール出力が返されます。
16,2,3,13 5,11,10,8 9,7,6,12 4,14,15,1