はじめに
DataSnap アーキテクチャでは、TCP/IP, HTTP, HTTPS のような異なる通信プロトコルを使用することができます。また、クライアントとサーバー間のネットワーク上で流れる生のバイトストリームに、プログラムでアクセス可能なトランスポートフィルタを使用することができます。
Delphi XE には、暗号化用に2つと圧縮用に1つのプリインストールされた 3つの DataSnap トランスポートフィルタが付属しています。
このラボで、サーバーとクライアントアプリケーションで構成されている単純なシステムを構築します。双方のアプリケーションは、スタンドアロン Delphi VCL フォームアプリケーションで、通信プロトコルとして TCP/IP を使って通信し、“Zlib” 圧縮フィルタを使用します。
サーバーを構築する
IDEのメニューより [ファイル|新規作成|その他] をクリックし、「新規作成」ダイアログの “Delphi プロジェクト\DataSnap Server” カテゴリ内の “DataSnap Server” をダブルクリックして、スタンドアロンの Delphi DataSnap サーバーアプリケーションを作成します。

ウィザードの最初の画面では、デフォルトのプロジェクト種類である “VCL フォームアプリケーション” のままにします。
残りのウィザードの画面上もすべてデフォルトの値とし、[完了] ボタンをクリックして、DataSnap サーバープロジェクトを生成します。
IDEのメニューから [ファイル|すべて保存] を選択し、ウィザードで作成された新しいプロジェクトのすべてのファイルを保存します。例えば、新しく “C:\DataSnapLabs\Filters\” フォルダを作成して、プロジェクトのメインユニットに “FormServerUnit” と命名し、他のユニット (通常 “ServerMethodsUnit1” と “ServerContainerUnit1”) はデフォルトの名前のままで、そして、プロジェクトには “FiltersServer” と命名して保存します。
ServerContainerUnit を開き、フォームデザイナ内の “DSTCPServerTransport1” コンポーネントを選択します。

“Filters” プロパティの省略ボタン […] をクリックします。このプロパティはコレクションで、省略ボタンをクリックすると、トランスポートコンポーネントへ、1つ、またはそれ以上のフィルタを追加することができるコレクションエディタが表示されます。
コレクションエディタの [新規追加] ボタンをクリック (または、[追加] ボタンを押します) し、 “FilterId” プロパティのドロップダウンリスト内の目的のフィルタを選択します。
Delphi XE には、“PC1”, “RSA”, “ZlibCompression” の 3つのプリインストールされたフィルタが付属しています。

DataSnap のトランスポートコンポーネントの “Filters” プロパティへ、ゼロ(0)、1、それ以上…のフィルターを追加することができます。
サーバーとクライアント間のトラフィックを圧縮するための “ZlibCompression” フィルタを追加します。
通信フィルタを適用した DataSnap サーバーの準備が整いました。クライアントの実装を行う番です。
プロジェクトマネージャで、プロジェクトグループのノード上でマウスの右ボタンをクリックし、表示されたポップアップメニューから [新規プロジェクトを追加] を選択します。表示された「新規作成」ダイアログで、“Delphi プロジェクト” のカテゴリから “VCL フォームアプリケーション” を選択し、IDEのメニューの [ファイル|すべて保存] を実行します。サーバープロジェクトと同じフォルダ内 (例えば “C:\DataSnapLabs\Filters\” フォルダ) に新しいファイルを保存するのがベストです。クライアントのメインとなるフォームユニットに “FormClientMain”、そのプロジェクト全体を “FiltersClient”、プロジェクトグループには “DSFilters” と命名します。
クライアントを実装する前に、サーバーが起動していなければなりません。プロジェクトグループ上で、マウスの右ボタンをクリックし、[すべてビルド] を選択します。サーバープロジェクトがアクティブ ( サーバープロジェクト名が、プロジェクトマネージャ内で「太字」に表示されている )であることを確認し、IDE のメニューから [実行|デバッガなしで実行] を選択します。サーバーのウィンドウは最小化しておきます。サーバーは、クライアントの開発の間、実行されている必要があります。
クライアントを構築する
この段階で、プロジェクトグループは、サーバーとクライアントで構成されます。クライアントの実装を行うためには、サーバーが実行されている必要があります。
クライアントアプリケーションのメインフォームを開き、フォーム上に “TSQLConnection” コンポーネントをドロップします。
“Driver” プロパティを “DataSnap” に設定し、 “LoginPromptSet” を “false” に設定します。
“Connected” プロパティを “true” に設定し、接続できるか試します。
残念ながら接続できません。以下のエラーメッセージが表示されるはずです。

クライアントの圧縮フィルタを有効にしていないので、サーバーに接続できません。
“SQLConnection1” コンポーネントの “Driver” プロパティを展開し、DataSnap の Driver の “Filters” プロパティに “ZLibCompression” を追加します。

わかりにくいですが、このラボの記事の最も重要な部分です!
“DBXCompressionFilter” ユニットをクライアントアプリケーション内の任意のユニットの “uses” 句に追加する必要があります。この操作の副作用は、圧縮フィルタ (TTransportCompressionFilter) がこのユニットの “initialization” 節内でクライアントに登録されることです。
“SQLConnection1” コンポーネント上で、マウスの右ボタンをクリックし、表示されたポップアップメニューから、[DataSnap クライアントクラスの生成] を選択します。
“proxy” として生成されたユニットを保存します。
クライアントフォームの “uses” 句に、“proxy” ユニットを追加します。
クライアントフォームに、ひとつのボタンとひとつのエディットコンポーネントを追加します。
ボタンコンポーネント上でダブルクリックし、 “OnClick” イベントハンドラに、以下のコードを入力します。
implementation
uses
DBXCompressionFilter,
proxy;
procedure
TForm3.Button1Click(Sender: TObject);
var
aClient: TServerMethods1Client;
begin
aClient := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
try
Edit1.Text := aClient.ReverseString(Edit1.Text);
finally
aClient.Free;
end
;
end
;
end
.
クライアントアプリケーションを実行すれば、圧縮されたネットワーク上の TCP/IP 通信を使用し、“ReverseString” サーバーメソッドを正しく呼び出すことができるはずです。
まとめ
Connect with Us