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

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

3.6.4 TCP/IP通信機能とバッファプーリング機能を使用する場合のコーディング例(C#の場合)

TCP/IP通信機能とバッファプーリング機能を使用する場合の,ASP.NET Webアプリケーションでの使用例を次に示します。

コメント中の(1),(2)などは「3.6.3 TCP/IP通信機能とバッファプーリング機能を使用する場合のメソッド発行手順」の説明の番号に対応しています。

 
using System;
using System.Text;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Connector;
using MyCompany;
 
namespace MyCompany
{
  public class MyForm1 : System.Web.UI.Page
  {
    …
    private void Button1_Click(object sender, System.EventArgs e)
    {
      TP1Connection tc = null;
      MessageBuffer inBuf = null;
      MessageBuffer outBuf = null;
      // このボタンがクリックされたら
      // OpenTP1<ServerA>のサービス要求を行う
      // グローバル変数のアプリケーション状態から
      // TP1ConnectionManagerを取得する
      // (1) TP1ConnectionManagerクラスの生成
      TP1ConnectionManager tcm =
         (TP1ConnectionManager)this.Application["tcmServerA"];
      // (2) TcpipConnectionオブジェクトの取得
      tc = tcm.GetTcpipConnection();
      try {
        Encoding enc = Encoding.Default;
        // (3) TcpipInfoクラスの生成
        TcpipInfo info = new TcpipInfo();
        // (4) 通信形態
        info.Flags = TcpipInfo.TCPIP_SENDRECV;
        // (4) 最大応答待ち時間
        info.WatchTime = 180;
        // (5) 入力用インデクスドレコードの生成
        IndexedRecord input =
                      tcm.CreateIndexedRecord("in_record");
        // (6)(7) 入力データ用メッセージバッファの取得,
        // および入力データの設定
        string indata = "Say Hello to OpenTP1!";
        // (6) 入力データ用メッセージバッファの取得
        int indataLen = enc.GetByteCount(indata);
        // (6) 入力データ用メッセージバッファの取得
        inBuf = tcm.GetMessageBuffer(indataLen);
        // (7) 入力データの設定
        inBuf.Append(enc.GetBytes(indata));
        // (8) 入力用インデクスドレコードの設定
        input.Add(inBuf);
        // (9) 出力用インデクスドレコードの生成
        IndexedRecord output =
                      tcm.CreateIndexedRecord("out_record");
        // (10) 出力データ用メッセージバッファの取得
        // および出力用インデクスドレコードの設定
        outBuf = tcm.GetMessageBuffer(this.textBox1.MaxLength*2);
        outBuf.MessageLength = 32;
        output.Add(outBuf);
        // (11) TCP/IP通信の実行
        bool ret = tc.Execute(info, input, output);
        // (12) データの取り出し
        outBuf = (MessageBuffer)output[0];
        // (12) データの取り出し
        byte[] outdata = outBuf.Buffer;
        // (12) データの取り出し
        this.textBox1.Text = enc.GetString(outdata);
      } catch (TP1ConnectorException exp) {
        // Connector .NETが検知したエラー
      } catch (TP1Exception exp) {
        // Connector .NET(OpenTP1共通クラス)が検知したエラー
      } catch (Exception exp) {
        // 予期しない例外
      }
      finally
      {
        // (13) 入力用メッセージバッファをバッファプールに戻す
        if (inBuf != null) inBuf.ReleaseMessageBuffer();
        // (14) 出力用メッセージバッファをバッファプールに戻す
        if (outBuf != null) outBuf.ReleaseMessageBuffer();
        // (15) コネクションをコネクションプールに戻す
        if (tc != null) tc.Dispose();
       }
    }
  }
}