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