クライアントの DataSnap サーバーへの接続
目次
TSQLConnection
TSQLConnection コンポーネントは、[ツール パレット]からフォームにドロップすることもできますし、コード内で明示的に使用することもできます。 ドライバは DataSnap を使用する必要があります。 接続プロパティ Login Prompt を false に設定すると、DataSnap サーバに接続するときに認証メッセージのウィンドウが開かないようにすることができます。
ドライバのプロパティとその意味を以下の表に示します。
プロパティ | 説明 |
---|---|
BufferKBSize | クライアントとサーバーの間で交換できるパケットの最大サイズです。TCP/IP ベースのプロトコルの場合、通信時間を最適化するには現在の 32 という値をお勧めします。 |
CommunicationProtocol | サーバーのトランスポート タイプにより、TCP/IP と HTTP のいずれかを受け付けます。 |
ConnectTimeout | 予想される接続時間(ミリ秒単位)です。接続時間は、通信に着手してからサーバー ソケットが最初に開くまでの時間と定義されています。 |
DSAuthPassword | 現在は HTTP 認証用に使われています。サーバーには認証マネージャ コンポーネントがリンクされるはずです。そのコンポーネントでこの値を使用します。 |
DSAuthUser | 現在は HTTP 認証用に使われています。サーバーには認証マネージャ コンポーネントがリンクされるはずです。そのコンポーネントでこの値と渡されたパスワードとを使用します。この 2 つのフィールドは、両方を指定するか両方を指定しないかにすることをお勧めします。 |
HostName | サーバーが稼働しているマシンの名前(または IP アドレス)です。 |
PassWord | サーバーがデータベース接続を開き、その接続を通じてクライアントのデータベース要求を渡すことが見込まれる場合の、データベース ユーザー パスワードです。サーバー接続が必要でない場合は、このプロパティを指定しないでください。 |
Port | サーバーが DataSnap 接続をリスンするポートの値です。この値は、サーバー側のトランスポート コンポーネントで定義されているものと一致する必要があります。 |
ServerConnection | サーバー接続の名前を保持します。これは、サーバーがデータベース接続を開くときの資格情報となります。データベース固有のクライアント要求すべてに対して、サーバーはプロキシの役割を果たします。例: DSAdmin.GetConnection("ASACONNECTION") |
URLPath | HTTP トランスポートベースのサーバーが要求をリスンするコンテキストに一致します。 |
UserName | サーバー接続に使用されるユーザー名です。サーバー接続が必要でない場合は、UserName を指定しないことをお勧めします。 |
DelegateName | 省略可能。デリゲート接続の名前を格納します。 |
DelegateConnection | 省略可能。デリゲート ドライバの名前を格納します。デリゲート ドライバは、アプリケーションと実際のドライバとの間の追加のレイヤになります。デリゲート ドライバは、接続プール、ドライバ プロファイリング、追跡、監査などに役立ちます。 |
- メモ:
- サーバー側で定義されているフィルタをインスタンス化できるコンテキストで、接続を行うことが重要です。 フィルタを登録するユニットは、フィルタ付き接続を作成する前にフィルタを登録しなければなりません。
-
- 実行時に HTTP プロトコルを使用する場合は、クライアント アプリケーションの uses リストに DSHTTPLayer ユニットを追加する必要があります。
TSQLConnection のクローズ
データ モジュールが一度 Datasnap 接続を生成したら、DataSnap サーバーとクライアント間にトンネルを確立する DBXConnection を作成します。TSQLConnection をクローズすると、DBXConnection もまたクローズされ、トンネルも破壊されます。このトンネルは、接続が再びオープンされると、また確立されます。このため、TSQLConnection をクローズする際には、TServerMethodsClient
オブジェクトを解放して、トンネルが再度構築されるようにしなければなりません。次のコード スニペットを参照してください。
DataModule2.SQLConnection1.Close;
DataModule2.ServerMethods1Client := nil;
- 警告:
TSQLConnection をクローズし、新しい SQL 接続をオープンした際に、TServerMethodsClient
オブジェクトを解放すると、プロジェクトはメッセージ「オペレーションが失敗ました。接続が閉じられます
」と共に、TDBXError を発生させます。
プロキシ メソッド クラスのインスタンス化
TSQLConnection の DBXConnection プロパティは、プロキシ メソッド クラスのインスタンス化のために使用できます。TSQLServerMethod インスタンスを使って、サーバー メソッドを明示的に呼び出すことができます。次の例を参照してください。
procedure TForm1.Button8Click(Sender: TObject);
var
reader: TDataSet;
begin
SQLServerMethod:= TSQLServerMethod.Create(nil);
SQLServerMethod.SQLConnection:= SQLConnection1;
try
SQLServerMethod.ServerMethodName:= 'TDSUtilityMethods.echoOutStr';
SQLServerMethod.Params[0].AsString := '123';
SQLServerMethod.ExecuteMethod;
memOutput.Text := SQLServerMethod.Params[1].AsString;
finally
SQLServerMethod.Close;
FreeAndNil(SQLServerMethod);
end;
end;
TDSRestConnection
TDSRestConnection コンポーネントは、[ツール パレット]からフォームにドロップすることもできますし、コード内で明示的に使用することもできます。接続プロパティ Login Prompt を false に設定すると、DataSnap サーバーに接続するときに認証メッセージのウィンドウが開かないようにすることができます。
DataSnap クライアント アプリケーションの作成時に変更する必要がある接続プロパティの一覧を次の表に示します。
プロパティ | 説明 |
---|---|
Host | サーバーが稼働しているマシンの名前(または IP アドレス)です。 |
Password | サーバーがデータベース接続を開き、その接続を通じてクライアントのデータベース要求を渡すことが見込まれる場合の、データベース ユーザー パスワードです。サーバー接続が必要でない場合は、このプロパティを指定しないでください。 |
Port | サーバーが DataSnap 接続をリスンするポートの値です。この値は、サーバー側のトランスポート コンポーネントで定義されているものと一致する必要があります。 |
Protocol | サーバーのトランスポートの種類に応じて、HTTP か HTTPS のいずれかを使用できます。 |
UserName | サーバー接続に使用されるユーザー名です。サーバー接続が必要でない場合は、UserName を指定しないことをお勧めします。 |
メモ: 実行時に HTTP プロトコルを使用する場合は、クライアント アプリケーションの uses リストに DSHTTPLayer ユニットを追加する必要があります。
REST
特定のサーバー メソッドには REST プロトコルを使ってアクセスすることができます。これは、JavaScript コードやネイティブ コードを使った Web ベースのクライアント アプリケーションで DSHTTP ユニットを使うことで実現できます。
次のコードは、REST サーバー サービス経由で GET コマンドを送信するネイティブ メソッドです。
procedure TForm1.SendGetRequest(var response: string; out responseCode: Integer);
var
http: TDSHTTP;
begin
http := TDSHTTP.Create;
try
response := http.Get(edtUri.Text);
except
response := http.ResponseText;
end;
responseCode := http.ResponseCode;
http.Free;
end;
関連項目