アプリケーションサーバーのインターフェースを拡張する
多層アプリケーションの作成:インデックス への移動
クライアントアプリケーションは,リモートデータモジュールのインスタンスを作成するかそれに接続することによって,アプリケーションサーバーと対話します。アプリケーションサーバーとのすべての通信にインスタンスのインターフェースを使用します。
リモートデータモジュールのインターフェースに追加することにより,クライアントアプリケーションに追加サポートを提供できます。このインターフェースは IAppServer の下位クラスで,リモートデータモジュールを作成するときにウィザードによって自動的に作成されます。
リモートデータモジュールのインターフェースに追加するには,次の方法があります。
- IDE の[編集]メニューから[インターフェースに追加]コマンドを選択します。手続き,関数,プロパティのいずれを追加するか指定し,その構文を入力します。[OK]をクリックすると,コードエディタ内で新規のインターフェースメンバーの実装部に位置付けられます。
- タイプライブラリエディタを使用します。タイプライブラリエディタでアプリケーションサーバーのインターフェースを選択し,追加するインターフェースメンバーの種類(メソッドまたはプロパティ)に対応するツールボタンをクリックします。[属性]ページでインターフェースメンバーに名前を付け,[パラメータ]ページでパラメータとタイプを指定して,タイプライブラリを更新します。タイプライブラリエディタの使い方については,「タイプライブラリの操作」を参照してください。
メモ: TSoapDataModule を実装する場合は,どの方法も役立ちません。TSoapDataModule の派生クラスについては,サーバーインターフェースを直に編集する必要があります。
COM インターフェースに追加する場合,変更内容はユニットソースコードとタイプライブラリファイル(.TLB)に追加されます。
メモ: タイプライブラリエディタで[更新]を選択し,IDE から変更を保存することによって,TLB ファイルを明示的に保存する必要があります。
リモートデータモジュールのインターフェースへの追加が済んだら,リモートデータモジュールの実装に追加されたプロパティとメソッドを探します。コードを追加してこの実装を完成させます。具体的には,新しいメソッドの本文を記述します。
SOAP データモジュールを記述しない場合,クライアントアプリケーションは接続コンポーネントの AppServer プロパティを使ってインターフェース拡張機能を呼び出します。SOAP データモジュールでは,接続コンポーネントの GetSOAPServer メソッドを呼び出します。インターフェース拡張機能を呼び出す方法の詳細は,「サーバーインターフェースの呼び出し」を参照してください。
アプリケーションサーバーのインターフェースにコールバックを追加する
コールバックを導入すると,アプリケーションサーバーがクライアントアプリケーションを呼び出すようにできます。これには,クライアントアプリケーションがアプリケーションサーバーのメソッドの 1 つにインターフェースを渡し,後でアプリケーションサーバーがこのメソッドを必要であれば呼び出します。ただし,リモートデータモジュールのインターフェースの拡張機能にコールバックが含まれていると,HTTP または SOAP ベースの接続を使用することができません。Datasnap.Win.SConnect.TWebConnection と SoapConn.TSoapConnection は,コールバックをサポートしていません。ソケットベースの接続を使用する場合,クライアントアプリケーションは,コールバックを使用するかどうかを SupportCallbacks プロパティの設定によって示さなければなりません。それ以外のタイプの接続は,自動的にコールバックをサポートします。
トランザクションアプリケーションサーバーのインターフェースを拡張する
トランザクションまたは即時アクティブ化を使用している場合は,すべての新規メソッドは終了時に SetComplete を呼び出して,終了を示さなければなりません。これにより,トランザクションが完了し,リモートデータモジュールを非アクティブにできるようになります。
さらに,セーフ参照が出される場合を除き,クライアントがアプリケーションサーバー上のオブジェクトまたはインターフェースと直接交信することを許可する新規メソッドから値を返すことはできません。ステートレスの MTS データモジュールを使用している場合は,セーフ参照の使用を無視することによって,リモートデータモジュールがアクティブであることが保証できないためにクラッシュを引き起こす可能性があります。