アプリケーション サーバーのインターフェイスの拡張

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

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


クライアント アプリケーションは、データ モジュールのインスタンスを作成するかインスタンスに接続することによって、アプリケーション サーバーとやり取りします。アプリケーション サーバーとのすべての通信に、そのインスタンスのインターフェイスが使われます。 データ モジュールのインターフェイスを拡張することで、クライアント アプリケーションに対してサポートする機能を追加することができます。このインターフェイスは、IAppServer の下位インターフェイスであり、データ モジュールの作成時にウィザードによって自動的に作成されます。

データ モジュールのインターフェイスを拡張するには、次の方法があります。

  • IDE の[編集]メニューから[インターフェイスに追加]コマンドを選択します。手続き、関数、プロパティのいずれを追加するかを指定し、構文を入力します。[OK]をクリックすると、コード エディタが開き、インターフェイスに追加したメンバの実装部分にカーソルが置かれます。
  • タイプ ライブラリ エディタを使用します。タイプ ライブラリ エディタでアプリケーション サーバーのインターフェイスを選択し、追加するインターフェイス メンバの種類(メソッドまたはプロパティ)に対応するツール ボタンをクリックします。[属性]ページでインターフェイス メンバに名前を付け、[パラメータ]ページでパラメータとその型を指定し、その後、タイプ ライブラリを更新します。タイプ ライブラリ エディタの使い方の詳細は、「タイプ ライブラリの操作」を参照してください。

メモ: TSoapDataModule を実装する場合には、どちらの方法も使用できません。TSoapDataModule の下位クラスの場合には、サーバー インターフェイスを直接編集する必要があります。

COM インターフェイスを拡張する場合、変更内容はユニット ソース コードとタイプ ライブラリ ファイル(.TLB)に追加されます。

メモ: タイプ ライブラリ エディタで[実装の更新]を選択し、その後 IDE で変更を保存することで、明示的に TLB ファイルを保存する必要があります。

リモート データ モジュールにインターフェイスを追加したら、リモート データ モジュールの実装に追加されたプロパティとメソッドを探します。新しいメソッドの本体部分にコードを追加して、実装を完成させます。

記述しているのが SOAP データ モジュール以外の場合、クライアント アプリケーションは、接続コンポーネントの AppServer プロパティを使用して、インターフェイスの拡張機能を呼び出します。SOAP データ モジュールの場合は、接続コンポーネントの GetSOAPServer メソッドを呼び出します。インターフェイス拡張機能を呼び出す方法の詳細は、「サーバー インターフェイスの呼び出し」を参照してください。

  • アプリケーション サーバーのインターフェイスにコールバックを追加する

コールバックを導入すると、アプリケーション サーバーがクライアント アプリケーションを呼び出せるようになります。これを行うには、クライアント アプリケーションがアプリケーション サーバーのメソッドにインターフェイスを渡します。その後、アプリケーション サーバーが必要に応じてそのメソッドを呼び出します。ただし、リモート データ モジュールのインターフェイスの拡張機能にコールバックが含まれていると、HTTP または SOAP ベースの接続を使用することができません。Datasnap.Win.SConnect.TWebConnectionSoap.SOAPConn.TSoapConnection ではコールバックをサポートしていません。ソケットベースの接続を使用する場合には、クライアント アプリケーションで SupportCallbacks プロパティを設定して、コールバックを使用するかどうかを示す必要があります。それ以外の種類の接続では、コールバックが自動的にサポートされます。

  • トランザクション アプリケーション サーバーのインターフェイスを拡張する

トランザクションを使用しているかジャストインタイムでアクティブ化を行っている場合、すべての新しいメソッドで必ず SetComplete を呼び出して、処理が終了したことを示す必要があります。これにより、トランザクションを完了し、リモート データ モジュールを非アクティブにすることができます。

また、新しいメソッドで、アプリケーション サーバー上のオブジェクトやインターフェイスとクライアントが直接通信することを許可している場合には、安全な参照を提供していない限り、メソッドから値を返すことができません。ステートレス MTS データ モジュールを使用している場合は、安全な参照を使用しなければ、リモート データ モジュールがアクティブであることを保証できないため、クラッシュが発生する可能性があります。

関連項目