チュートリアル:ISAPI DLL サーバーを使用した DataSnap アプリケーション
データベースおよび LiveBinding のチュートリアル への移動
このチュートリアルでは、簡単なクライアント/サーバー アプリケーションを作成する基本手順を説明します。サーバーは ISAPI DLL アプリケーションとして実装し、クライアントは Delphi で記述します。サーバーを作成し、クライアントとサーバーの間の接続を DataSnap でアクティブにすると、サーバーで定義し実装したメソッドをクライアントから呼び出すことができます。
主な手順は次のとおりです。
- 環境を構成します。ISAPI 開発を有効にするにはこの設定が必要です。
- サーバーを作成します。
- クライアントを作成します。
開発環境を構成する
- [スタート]メニューを開き、検索フィールドに「Turn Windows」と入力します。一致した項目の中から[Windows の機能の有効化または無効化]を選択します。
-
[Windows の機能]ダイアログ ボックスの[インターネット インフォメーション サービス]ノードを展開し、以下を行います。
- [Web 管理ツール]の[IIS 管理コンソール]のチェックをオンにします。
- [World Wide Web サービス]の[アプリケーション開発機能]を展開し、[CGI]と[ISAPI 拡張機能]のチェックをオンにします。
- Windows 機能を有効にしたら、[スタート]メニューを開いて検索フィールドに「IIS」と入力し、[インターネット インフォメーション サービス (IIS) マネージャー]を開きます。[接続]以下のノードを展開し、[アプリケーション プール]をクリックし、[DefaultAppPool]を選択します。
- [操作]パネルで[詳細設定...]をクリックし、[32 ビット アプリケーションの有効化]を[True]に設定します。
メモ:- [32 ビット アプリケーションの有効化]が [True]に設定されている場合、32 ビット アプリケーションのみがサポートされ、64 ビット アプリケーションに対しては、内部サーバー エラー メッセージが返されます。
- [32 ビット アプリケーションの有効化]が [False]に設定されている場合、64 ビット アプリケーションのみがサポートされ、32 ビット アプリケーションに対しては、内部サーバー エラー メッセージが返されます。
- [接続]パネルの[サイト]ノードを展開し、[Default Web Site]を右クリックして[仮想ディレクトリの追加...]を選択します。[エイリアス]と[物理パス]を入力します。
- [接続]パネルのルート ノードを選択し、[ISAPI および CGI の制限]をダブルクリックします。[操作]パネルで[機能設定の編集...]を選択し、2 つのオプションをオンにします。
- ルート ノードに戻り、[ハンドラー マッピング]をダブルクリックします。[操作]パネルで[機能のアクセス許可の編集...]を選択し、[実行]をオンにします。
- ルート ノードを選択し、[操作]パネルで[開始]をクリックしてサーバーを起動します。
サーバーを作成する
-
[ファイル|新規作成|その他...|Delphi プロジェクト|DataSnap Server]を選択し、[DataSnap WebBroker アプリケーション]を選択します。
- プロジェクトの種類を[ISAPI ダイナミック リンク ライブラリ]に設定します。[次へ >>]をクリックします。
- [サーバーの機能]で、[サーバー メソッド クラス]が選択されていることを確認します。[次へ >>]をクリックします。
- 上位の型として[TComponent]を選択します。[完了]をクリックします。
- ServerMethodsUnit1: この DataSnap サーバーのサーバー メソッドを実装しています。EchoString および ReverseString という 2 つの単純なメソッドの実装が含まれていて、パラメータとして指定された値を通常の状態と逆の状態でそれぞれ返します。
- WebModuleUnit1: この ISAPI DLL を DataSnap サーバーとして機能させるためのコンポーネントが含まれています。DSHTTPWebDispatcher は、ISAPI/WebBroker HTTP 要求を管理する責務を持ち、DataSnap サーバーに代わって応答します。
- DSHTTPWebDispatcher1 コンポーネントと DSServerClass1 コンポーネントの Server プロパティは、どちらも DSServer1 に設定されています。
-
出力ディレクトリを仮想ディレクトリの物理パス 'C:\myExample' に設定します。
- [プロジェクト マネージャ]で Project1.dll を右クリックします。
- [オプション...]を選択します。
- [出力ディレクトリ]を、「開発環境を構成する」のステップ 4 で指定した物理パスに変更します。
- プロジェクトをビルドします。
- サーバーが動作していることを確認します。
- ブラウザで "localhost/myExample/Project1.dll" を開きます。次のようなページが表示されます。
-
この例では、SayHello という名前を新しいメソッドを、ServerMethodsUnit1 に追加します。このメソッドは、"Hello, FirstName LastName !" といった連結文字列を返します(FirstName と LastName は、2 つも文字列パラメータ)。
Delphiunit ServerMethodsUnit1; interface uses System.SysUtils, System.Classes, Datasnap.DSServer, Datasnap.DSAuth; type {$METHODINFO ON} TServerMethods1 = class(TComponent) private { Private declarations } public { Public declarations } ... function SayHello(FirstName: string; LastName: string): string; end; {$METHODINFO OFF} implementation uses System.StrUtils; ... function TServerMethods1.SayHello(FirstName, LastName: string): string; begin Result := 'Hello, ' + FirstName + ' ' + LastName + ' !'; end; end.
- Project1.dll をビルドします。エラーが発生した場合には、[インターネット インフォメーション サービス (IIS) マネージャー]でサーバーを停止し、プロジェクトをビルドしてから、サーバーを起動します。
-
ブラウザからメソッドを呼び出します。DataSnap/REST 呼び出しのデフォルト パターンは以下のとおりです。
ここで、http:// <サーバー名>[:<ポート>]/datasnap/rest/<クラス名>/<メソッド>/<引数 1>/<引数 2>/...<引数 N>
- <サーバー名> は、サーバーまたはドメインの名前です(HTTP 要求の標準部分)。
- <ポート> は、http または https に標準以外のポートが割り当てられている場合に指定しなければなりません。
- /datasnap/rest は、DataSnap サーバーで特別なディスパッチ処理を行うためのパターンです ("datasnap" と "rest" の値はどちらも、任意の識別子で上書きすることができます)。
- /<クラス名> は、クラスの名前です。
- /<メソッド> は、クラス メソッド(関数または手続き)の名前です。
- /<引数 1> ... /<引数 N> は、メソッドに渡すパラメータです。引数に特殊文字が含まれている場合には、URL エンコードしなければなりません。
クライアントを作成する
- 新しいマルチデバイス アプリケーション プロジェクトを、ProjectGroup1 に追加します。
-
TDSRestConnection コンポーネントをフォームにドロップします。
- [オブジェクト インスペクタ]で、Host を「localhost」に設定します。
- LoginPrompt を[False]に設定します。
- UrlPath を「myExample/Project1.dll」に設定します。
- Form1 上の DSRestConnection1 コンポーネントを右クリックし、[DataSnap クライアント クラスの生成]を選択します。ClientClassesUnit1.pas という新しいユニットがプロジェクトに追加されます。
- Unit1 の Form1 に戻り、TLabel コンポーネントを 2 つドロップします。Text プロパティを、Label1 は「FirstName」に、Label2 は「LastName」に変更します。
- フォームに TEdit コンポーネントを 2 つ追加します。Name プロパティを「First」と「Last」に変更します。
- TButton を 1 つドロップし、Text プロパティを「SayHello」に設定します。
-
オブジェクト インスペクタで、[イベント]に切り替え、OnClick イベントを SayHello TButton に対して実装します:
procedure TForm1.SayHelloClick(Sender: TObject); var Temp: TServerMethods1Client; begin Temp := TServerMethods1Client.Create(DSRestConnection1); ShowMessage(Temp.SayHello(First.Text, Last.Text)); end;
- プロジェクトを保存し、[実行]をクリックします。