4.6.4 TCP/IP通信機能とバッファプーリング機能を使用する場合のコーディング例(C#の場合)
TCP/IP通信機能とバッファプーリング機能を使用する場合の,ASP.NET Webアプリケーションでの使用例を次に示します。
コメント中の(1),(2)などは「4.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(); } } } }