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_INSTALL
MathWorks.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