チュートリアル:アプリケーションで REST DataSnap サーバーを使用する

提供: RAD Studio
移動先: 案内検索

データベースおよび LiveBinding のチュートリアル への移動


DataSnap 技術により、インターネット、ローカル ネットワークまたはローカル ホスト内を通信する、クライアントサーバー型アプリケーションを作成できます。

次のサンプルでは、簡単なローカルのクライアントサーバー型アプリケーションを作成するときの DataSnap の使用方法について示します。クライアント アプリケーションとサーバー アプリケーションの両方とも Delphi で実装されています。サーバーを作成し、クライアントとサーバー間の接続を DataSnap でアクティブにした後に、サーバーで定義され、実装されているメソッドを、クライアントが呼び出すことができます。

サーバーは Delphi と C++Builder のいずれでも実装できます。クライアントを同じ言語で実装する必要はありません。DataSnap では、Delphi でサーバーを、C++Builder でクライアントを実装することも、その逆の組み合わせにすることも可能です。

DataSnap サーバーの主要コンポーネント

主なコンポーネントは以下のとおりです。

TDSServer コンポーネントは DataSnap サーバー アプリケーションの中心ロジックです。これには、サーバーを開始する Start メソッドと、停止する Stop メソッドが含まれます。AutoStart プロパティもあります。デフォルトでは、AutoStart の値は True に設定され、アプリケーションの起動時に、サーバーが自動的に起動します。1 つのサーバー アプリケーションに必要なのは、1 つの TDSServer コンポーネントだけです。

TDSServerClass コンポーネントはサーバー クラスを表します。DataSnap サーバーは、サーバー クラスのインスタンスを自動的に作成し、破棄します。

クライアントとサーバーの間の通信は、HTTP 通信プロトコルを使って行われます。

サーバー アプリケーションの作成

  1. プロジェクトを新規作成します。
    • メイン メニューから[ファイル|新規作成|その他...]を選択します。
    • 左列の[C++Builder プロジェクト]ノードまたは[Delphi プロジェクト]ノード下の[DataSnap Server]ノードを選択します。
    • [DataSnap REST アプリケーション]を選択し、[OK]をクリックします。
    • 以下の手順で、アプリケーションの種類を指定します。
      1. [スタンドアロン フォーム アプリケーション]を選択し、[次へ >>]ボタンをクリックします。
      2. 次のいずれかのオプションを選択します。
        • [VCL アプリケーション]
        • [FireMonkey アプリケーション]
      3. HTTP 通信プロトコルを使用するというデフォルト値はそのままにして、[次へ >>] ボタンをクリックします。
      4. [サーバー メソッド クラス]オプションを選択し、[次へ >>]ボタンをクリックします。
      5. サーバー クラスを完全に実装するための [TComponent] を選択し、[次へ >>]ボタンをクリックします。
      6. [プロジェクトの場所]を選択し、[完了] ボタンをクリックします。
  2. Form1Caption プロパティを「ServerForm」に変更します。
    ServerFormDSTutorial.png
  3. メイン メニューの[ファイル|すべて保存]をクリックします。
  4. FormUnit1ServerUnitWebModuleUnit1WebModuleUnit1ServerMethodsUnit1ServerMethodsUnit1、プロジェクトを MyServerProj という名前でそれぞれ保存します。
    この時点で、必要な DataSnap コンポーネントはすべて、次のように WebModuleUnit1 に自動的に追加されています。
    WebModuleDSApplication.png
  1. ServerMethodsUnit1 には EchoString および ReverseString という 2 つの単純なメソッドの実装が含まれていて、パラメータとして指定された値を通常の状態と逆の状態でそれぞれ返します。 この例では、2 つの浮動小数点数の合計を返す新しいメソッドを ServerMethodsUnit1 に追加します。
    Delphi の場合:
    unit ServerMethodsUnit1;
    
    interface
    uses System.SysUtils, System.Classes, Datasnap.DSServer, Datasnap.DSAuth;
    type
      {$METHODINFO ON}
      TServerMethods1 = class(TComponent)
      private
        { Private declarations }
      public
        { Public declarations }
         function Sum(const A, B: Double): Double;
      end;
      {$METHODINFO OFF}
    
    implementation
    uses System.StrUtils;
    
    function TServerMethods1.Sum(const A, B: Double): Double;
    begin
      Result := A + B;
    end;
    
    end.
    

    メモ: {$METHODINFO ON} 指令では、DataSnap サーバーで必要な実行時情報が生成されます。したがって、これは必須です。単なるコメントではありません。詳細は、「METHODINFO 指令(Delphi)」を参照してください。

    C++ の場合:

    "ServerMethodsUnit1.h" に次の関数宣言を追加します。

    double __fastcall sum(double A, double B);
    

    "ServerMethodsUnit1.cpp" に追加した関数のコードを完成させます。

    double __fastcall TServerMethods1::sum(double A, double B)
    {
    	return A + B;
    }
    
  2. クライアント アプリケーションを作成する前に、サーバーを実行します。
    • [実行|デバッガを使わずに実行]をメイン メニューから選択します。
    • [起動]ボタンをクリックします。表示される[ServerForm]ダイアログは最小化して構いません。

クライアント アプリケーションの作成

  1. サーバー アプリケーションと同じプロジェクト グループ内にクライアント アプリケーションを作成します。手順は以下のとおりです。
    • [プロジェクト マネージャ]で、ProjectGroup ノードを右クリックします。
    • [新規プロジェクトを追加...]オプションを選択します。
    • [Delphi プロジェクト]項目から[FireMonkey デスクトップ アプリケーション]を選択し、[OK]ボタンをクリックします。
    • [空のアプリケーション]を選択し、[OK]ボタンをクリックします。
    • メイン メニューの[ファイル|新規作成|その他...]をクリックします。
    • 左列の[DataSnap Server]ノードから [DataSnap REST クライアント モジュール]を選択し、[OK] ボタンをクリックします。
      RESTClientModuleMenu.png
    • モジュールの種類を次のように指定します。
      • デフォルト値([ローカル サーバー])を選択したまま、[次へ] ボタンを押します
      • デフォルト値([DataSnap スタンドアロン サーバー])を選択したまま、[次へ] ボタンを押します。
      • 接続パラメータのデフォルト値のままで、[完了]ボタンをクリックします。
      これで、ウィザードによって ClientModuleUnitClientClassesUnit が生成されます。
  2. Form2Caption プロパティを「ClientForm」に変更します。
  3. メイン メニューの[ファイル|すべて保存]をクリックします。
  4. Unit2ClientUnitClientModuleUnit1ClientModuleUnitClientClassesUnit1ClientClassesUnit、プロジェクトを MyClientProj という名前でそれぞれ保存します。
  5. プロジェクト グループを DSServerExample として保存します。
  6. データを入力し、結果を書き込むコントロール(合計計算用のボタン、ラベル、編集ボックス)をクライアント フォームに次の図のように配置します。ラベル A のとなりにある TEditName プロパティを EditA に変更し、BTEditNameEditB に変更します。ResultTEditName を「EditResult」に設定します。すべての TEdit コントロールの Text プロパティを空白にします。TButtonName を「Calculate」に設定します。
    これで、クライアント フォームは次のようになっています。
    DSAppClientForm2.png
  7. ユニット名 ClientClassesUnit および ClientModuleUnitClientUnit.pas のユニット リストに追加します。
  • C++ の場合は、#include "ClientClassesUnit.h" 行と #include "ClientModuleUnit.h" 行を ClientUnit.cpp の先頭に追加します。
  1. クライアント アプリケーションで必要なメソッドを呼び出します。この例では、TButton コンポーネントの OnClick イベントを実装し、自動的に生成された DataSnap クライアント ユニットの Sum メソッドを呼び出します。ここでは、ボタンのイベント ハンドラは TClientForm.CalculateClick(Delphi)または TClientForm::Button1Click(C++)です。

    Delphi の場合:

    procedure TClientForm.CalculateClick(Sender: TObject);
    var
      Temp: TServerMethods1Client;
      A, B: Double;
    begin
      Temp := TServerMethods1Client.Create(ClientModule1.DSRESTConnection1);
    try
      A := StrToFloat(EditA.Text);
      B := StrToFloat(EditB.Text);
      EditResult.Text := FloatToStr(Temp.Sum(A, B));
    finally
      Temp.Free;
    end;
    end;
    

    C++ の場合:

    void __fastcall TClientForm::Button1Click(TObject *Sender)
    {
      TServerMethods1Client *Temp;
      double A, B;
    
      Temp = new TServerMethods1Client(ClientModule1->DSRestConnection1);
      try
      {
        A = StrToFloat(EditA->Text);
        B = StrToFloat(EditB->Text);
        EditResult->Text = FloatToStr(Temp->sum(A,B));
      }
      __finally
      {
        delete Temp;
      }
    }
    
    メモ: サーバー メソッドの定義を変更した場合には、プロキシを更新する必要があります。それには ClientModuleUnitTDSRestConnection コンポーネントを右クリックし、コンテキスト メニューの[DataSnap クライアント クラスの生成]をクリックします。
  2. 最後に、クライアント アプリケーションをビルドし実行します。クライアント フォームが表示されます。[A][B]の各フィールドに 10 進数を入力し、[Calculate]ボタンをクリックすると、合計が[Result]フィールドに表示されます。
    DSAppClientRunning.png

関連項目