チュートリアル:アプリケーションで REST DataSnap サーバーを使用する
データベースおよび 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 通信プロトコルを使って行われます。
サーバー アプリケーションの作成
- プロジェクトを新規作成します。
- メイン メニューから[ファイル|新規作成|その他...]を選択します。
- 左列の[C++Builder プロジェクト]ノードまたは[Delphi プロジェクト]ノード下の[DataSnap Server]ノードを選択します。
- [DataSnap REST アプリケーション]を選択し、[OK]をクリックします。
- 以下の手順で、アプリケーションの種類を指定します。
- [スタンドアロン フォーム アプリケーション]を選択し、[次へ >>]ボタンをクリックします。
- 次のいずれかのオプションを選択します。
- [VCL アプリケーション]
- [FireMonkey アプリケーション]
- HTTP 通信プロトコルを使用するというデフォルト値はそのままにして、[次へ >>] ボタンをクリックします。
- [サーバー メソッド クラス]オプションを選択し、[次へ >>]ボタンをクリックします。
- サーバー クラスを完全に実装するための [TComponent] を選択し、[次へ >>]ボタンをクリックします。
- [プロジェクトの場所]を選択し、[完了] ボタンをクリックします。
- Form1 の Caption プロパティを「ServerForm」に変更します。
- メイン メニューの[ファイル|すべて保存]をクリックします。
- FormUnit1 を ServerUnit、WebModuleUnit1 を WebModuleUnit1、ServerMethodsUnit1 を ServerMethodsUnit1、プロジェクトを MyServerProj という名前でそれぞれ保存します。
-
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; }
- クライアント アプリケーションを作成する前に、サーバーを実行します。
- [実行|デバッガを使わずに実行]をメイン メニューから選択します。
- [起動]ボタンをクリックします。表示される[ServerForm]ダイアログは最小化して構いません。
クライアント アプリケーションの作成
- サーバー アプリケーションと同じプロジェクト グループ内にクライアント アプリケーションを作成します。手順は以下のとおりです。
- [プロジェクト マネージャ]で、ProjectGroup ノードを右クリックします。
- [新規プロジェクトを追加...]オプションを選択します。
- [Delphi プロジェクト]項目から[FireMonkey デスクトップ アプリケーション]を選択し、[OK]ボタンをクリックします。
- [空のアプリケーション]を選択し、[OK]ボタンをクリックします。
- メイン メニューの[ファイル|新規作成|その他...]をクリックします。
- 左列の[DataSnap Server]ノードから [DataSnap REST クライアント モジュール]を選択し、[OK] ボタンをクリックします。
- モジュールの種類を次のように指定します。
- デフォルト値([ローカル サーバー])を選択したまま、[次へ] ボタンを押します
- デフォルト値([DataSnap スタンドアロン サーバー])を選択したまま、[次へ] ボタンを押します。
- 接続パラメータのデフォルト値のままで、[完了]ボタンをクリックします。
- これで、ウィザードによって ClientModuleUnit と ClientClassesUnit が生成されます。
- Form2 の Caption プロパティを「ClientForm」に変更します。
- メイン メニューの[ファイル|すべて保存]をクリックします。
- Unit2 を ClientUnit、ClientModuleUnit1 を ClientModuleUnit、ClientClassesUnit1 を ClientClassesUnit、プロジェクトを MyClientProj という名前でそれぞれ保存します。
- プロジェクト グループを DSServerExample として保存します。
- データを入力し、結果を書き込むコントロール(合計計算用のボタン、ラベル、編集ボックス)をクライアント フォームに次の図のように配置します。ラベル A のとなりにある TEdit の Name プロパティを EditA に変更し、B の TEdit の Name を EditB に変更します。Result の TEdit の Name を「EditResult」に設定します。すべての TEdit コントロールの Text プロパティを空白にします。TButton の Name を「Calculate」に設定します。
- ユニット名 ClientClassesUnit および ClientModuleUnit を ClientUnit.pas のユニット リストに追加します。
-
- C++ の場合は、
#include "ClientClassesUnit.h"
行と#include "ClientModuleUnit.h"
行を ClientUnit.cpp の先頭に追加します。
- C++ の場合は、
- クライアント アプリケーションで必要なメソッドを呼び出します。この例では、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; } }
-
- メモ: サーバー メソッドの定義を変更した場合には、プロキシを更新する必要があります。それには ClientModuleUnit の TDSRestConnection コンポーネントを右クリックし、コンテキスト メニューの[DataSnap クライアント クラスの生成]をクリックします。
-
- 最後に、クライアント アプリケーションをビルドし実行します。クライアント フォームが表示されます。[A]と[B]の各フィールドに 10 進数を入力し、[Calculate]ボタンをクリックすると、合計が[Result]フィールドに表示されます。