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();
      }
   }
 }
}