Main Content

C# クライアントの作成

この例では、MATLAB® Production Server™ にデプロイされた MATLAB 関数を呼び出すための C# アプリケーションを記述する方法を説明します。この C# アプリケーションは MATLAB Production Server の .NET クライアント ライブラリを使用します。

このタスクは通常、.NET アプリケーション プログラマが行います。チュートリアルでは、Microsoft® Visual Studio® と .NET がコンピューターにインストールされているものと仮定しています。

Microsoft Visual Studio プロジェクトの作成

  1. Microsoft Visual Studio を開きます。

  2. [ファイル]、[新規作成]、[プロジェクト] をクリックします。

  3. [新規プロジェクト] ダイアログ ボックスで、使用するテンプレートを選択します。たとえば、Visual Studio 2017 で C# コンソール アプリケーションを作成する場合、左側のナビゲーション ペインで [Visual C#][Windows デスクトップ] を選択し、その後 [コンソール アプリ (.NET Framework)] を選択します。

  4. [名前] フィールドにプロジェクトの名前を入力します (たとえば Magic)。

  5. [OK] をクリックします。Magic ソース シェルが作成され、既定では、通常 Program.cs と命名されます。

クライアント ランタイム ライブラリへの参照の作成

Magic プロジェクトで MATLAB Production Server クライアント ランタイム ライブラリへの参照を作成します。Microsoft Visual Studio で、以下の手順を実行します。

  1. Microsoft Visual Studio の [ソリューション エクスプローラー] ペイン (通常は右側) で、Magic プロジェクトを右クリックして、[追加][参照] を選択します。

  2. MATLAB Production Server の .NET クライアント ランタイム ライブラリがある場所を参照します。

    オンプレミスの MATLAB Production Server インストールでは、ライブラリは $MPS_INSTALL\client\dotnet にあります。ここで、$MPS_INSTALLMATLAB Production Server がインストールされている場所です。MathWorks.MATLAB.ProductionServer.Client.dll ファイルを選択します。

    クライアント ライブラリは https://www.mathworks.com/products/matlab-production-server/client-libraries.html でダウンロードすることもできます。

  3. [OK] をクリックします。これで、Microsoft Visual Studio プロジェクトは MathWorks.MATLAB.ProductionServer.Client.dll を参照するようになりました。

サーバーへの MATLAB 関数のデプロイ

関数 magic (MATLAB) を使用して魔方陣を作成する MATLAB 関数 mymagic を作成し、mymagicmymagic_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 アプリケーションの記述、ビルド、および実行

  1. 以前に作成した Microsoft Visual Studio プロジェクト Magic を開きます。

  2. 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)。

  3. アプリケーションをビルドします。[ビルド][ソリューションのビルド] をクリックします。

  4. アプリケーションを実行します。[デバッグ][デバッグなしで開始] をクリックします。プログラムから、次のコンソール出力が返されます。

    16,2,3,13
    5,11,10,8
    9,7,6,12
    4,14,15,1 

関連するトピック