分散トランザクション処理機能 TP1/Connector for .NET Framework 使用の手引

[目次][用語][索引][前へ][次へ]

3.6.3 TCP/IP通信機能とバッファプーリング機能を使用する場合のメソッド発行手順

TCP/IP通信機能とバッファプーリング機能を使用する場合のメソッド発行手順を次に示します。

  1. TP1ConnectionManagerクラスのインスタンスを生成または取り出します。
    構成定義を特定のプロファイルから読み込む場合は,コンストラクタの引数にプロファイルIDを指定します。インスタンスの生成はアプリケーションごとに行うことを推奨します。TCP/IP通信とRPCとを併用する場合は,RPCで使用するプロファイルIDとは異なるプロファイルIDで構成定義を設定することを推奨します。
  2. TP1ConnectionManagerクラスのGetTcpipConnectionメソッドでTcpipConnectionオブジェクトを取得します。
    コネクションプールに使用できるコネクションがあった場合は,この時点でコネクションプールからコネクションを取り出した状態になります。
  3. TcpipInfoクラスのインスタンスを生成します。
  4. TcpipInfoオブジェクトにタイムアウト値,通信形態を設定します。
  5. TP1ConnectionManagerクラスのCreateIndexedRecordメソッドを発行して入力用インデクスドレコードを生成します。
  6. TP1ConnectionManagerクラスのGetMessageBufferメソッドに入力データサイズを指定して発行して,入力データ用のMessageBuffer実装オブジェクトを取得します。
    バッファプールに使用できるバッファがあった場合は,この時点でバッファプールからバッファを取り出した状態になります。
  7. MessageBuffer実装オブジェクトが保持しているバッファに入力データを設定します。
  8. 入力用インデクスドレコードに入力データを設定したバッファを設定します。
  9. TP1ConnectionManagerクラスのCreateIndexedRecordメソッドを発行して,出力用インデクスドレコードを生成します。
  10. TP1ConnectionManagerクラスのGetMessageBufferメソッドに出力データサイズを指定して発行し,出力データ用のMessageBuffer実装オブジェクトを取得して,出力用インデクスドレコードに設定します。
    バッファプールに使用可能なバッファがあった場合は,この時点でバッファプールからバッファを取り出した状態になります。また,TCP/IP通信では,出力データ用のMessageBuffer実装オブジェクトのMessageLengthにあらかじめ受信データサイズを設定しておきます。
  11. TcpipConnectionクラスのExecuteメソッドを発行してTCP/IP通信を行います(何度でも発行できます)。
    再度TCP/IP通信を行う場合は,4.〜11.のどれかから行います。
    各オブジェクトは複数回のTCP/IP通信で再利用できます。
  12. 出力用インデクスドレコードからデータを取り出します。
  13. 入力用MessageBuffer実装オブジェクトのReleaseMessageBufferメソッドを発行して,入力用メッセージバッファをバッファプールに戻します。
  14. 出力用MessageBuffer実装オブジェクトのReleaseMessageBufferメソッドを発行して,出力用メッセージバッファをバッファプールに戻します。
  15. TcpipConnectionクラスのDisposeメソッドを発行して,コネクションをコネクションプールに戻します。
    複数のTcpipConnectionオブジェクトを使う場合は,それぞれのインスタンスが不要になった時点でDisposeメソッドを発行します。
 
注1
ASP.NET Webアプリケーションで使用する場合,MessageBufferクラスのReleaseMessageBufferメソッド,およびTcpipConnectionクラスのDisposeメソッドを,次の時点で必ず発行してください。
  • 各UIイベントハンドラの終了時
  • Webサービスメソッドの終了時
これらのメソッドを適切に発行しないと,メモリリークの原因となります。
また,TP1ConnectionManagerクラスは,ASP.NETではアプリケーション状態,またはアプリケーションインスタンスに保持することを推奨します。各UIイベントハンドラやWebサービスメソッドごとに生成や削除を繰り返した場合,性能劣化やメモリ使用効率低下の原因となります。
注2
出力データ用のMessageBuffer実装オブジェクトのMessageLengthプロパティにあらかじめ受信データサイズ設定しなかった場合は,バッファ長が受信データサイズと見なされます。バッファ長が実際の受信データサイズと異なる場合は,受信データにずれが生じたり,受信タイムアウトが発生したりすることがあります。