Hitachi

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


Mcf

〈このページの構成〉

Mcfの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
  +- Hitachi.OpenTP1.Server.Mcf

説明

Mcfクラスは,アプリケーション間でメッセージの送受信をするときに使う,メッセージ送受信機能を使用するためのメソッドを提供します。

メソッドの一覧

名称

説明

Send(System.Int32, System.String, System.Byte[], System.Int32)

相手システムへ一方送信メッセージを送信します。

SendReceive(System.Int32, System.String, System.Byte[], System.Int32, System.Byte[], System.Int32,System.Int32,System.Int32,System.Int32)

同期型でメッセージを送信したあと,同期型でメッセージを受信します。

メソッドの詳細

Send

説明

相手システムへ一方送信メッセージを送信します。一方送信メッセージは,一つのセグメントで構成されます。

セグメントを送信する領域の形式を次に示します。Lはヘッダ領域の長さです。バッファ形式1の場合は8バイト,バッファ形式2の場合は4バイトになります。

[図データ]

宣言
【C#の場合】
public static void Send(
  int action,
  string terminalName,
  byte[] sendData,
  int sendDataLength
);
【Visual Basicの場合】
Public Shared Function Send( _
  ByVal action As Integer, _
  ByVal terminalName As String, _
  ByVal sendData() As Byte, _
  ByVal sendDataLength As Integer _
)
【J#の場合】
public static void Send(
  int action,
  System.String terminalName,
  ubyte[] sendData,
  int sendDataLength
);
パラメタ
action

単一セグメントを送信すること,優先か一般か,出力通番を付けるかどうか,および使用するバッファ形式を,次の形式で設定します。

DCMCFEMI〔|{DCMCFNORM|DCMCFPRIO}〕
〔|{DCMCFSEQ|DCMCFNSEQ}〕〔|{DCMCFBUF1|DCMCFBUF2}〕
  • TP1ServerFlags.DCMCFEMI

    メッセージが単一セグメントであることを設定します。

  • TP1ServerFlags.DCMCFNORM

    一般の一方送信メッセージとして送信する場合に設定します。

  • TP1ServerFlags.DCMCFPRIO

    優先の一方送信メッセージとして送信する場合に設定します。

  • TP1ServerFlags.DCMCFSEQ

    出力通番が必要な場合に設定します。

  • TP1ServerFlags.DCMCFNSEQ

    出力通番が必要ない場合に設定します。

  • TP1ServerFlags.DCMCFBUF1

    バッファ形式1を使用する場合に設定します。

  • TP1ServerFlags.DCMCFBUF2

    バッファ形式2を使用する場合に設定します。

terminalName

出力先の論理端末名称を設定します。論理端末名称の長さは最大8バイトです。論理端末名称の後ろにはヌル文字を付けてください。

sendData

送信するセグメントの内容を設定した領域を設定します。一つのセグメントで32000バイトまで送信できます。

sendDataLength

送信するセグメントの長さを設定します。

戻り値

なし

例外
Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

  • メッセージ

    例外の内容が出力されます。

    OpenTP1提供関数内でエラーが発生した場合は,次のように出力されます。

    "OpenTP1提供関数実行時にエラーが発生しました。"

    それ以外の場合は,各エラーに対応したメッセージが出力されます。

  • クラス名

    例外が発生したクラス名が出力されます。

  • メソッド名

    例外が発生したメソッド名が出力されます。

  • 引数名(OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力)

    例外が発生する原因となった引数名が出力されます。

  • エラーコード

    発生原因に応じ,次のエラーコードが出力されます。

    エラーコード

    説明

    DCMCFER_INVALID_ARGS

    引数に設定した値が間違っています。

    DCMCFER_PROTO

    プロトコル不正です。

    メッセージ送受信機能の使用が有効になっていません。

    DCMCFRTN_71002

    メッセージキューへの出力処理中に障害が発生しました。

    メッセージキューが閉塞されています。

    メッセージキューが割り当てられていません。

    セグメント長に32000バイトを超える値を設定しています。

    MCFが終了処理中のため,メッセージの送信を受け付けられません。

    DCMCFRTN_71003

    メッセージキューが満杯です。

    DCMCFRTN_71004

    メッセージを格納するバッファをメモリ上に確保できませんでした。

    DCMCFRTN_71108

    メッセージを送信しようとしましたが,送信先の管理テーブルが確保できませんでした。

    プロセスのローカルメモリが不足しています。

    DCMCFRTN_72000

    トランザクションでないSPP.NETの処理から,Sendメソッドを呼び出しています。

    DCMCFRTN_72001

    Sendメソッドを呼び出せない論理端末を設定しています。

    terminalNameに設定した論理端末名称が間違っています。

    DCMCFRTN_72016

    actionに設定したメッセージ種別(DCMCFNORMまたはDCMCFPRIO)の値が間違っています。

    actionに設定した値が間違っています。

    引数に設定した値が間違っています。

    DCMCFRTN_72017

    actionに設定した出力通番の要否(DCMCFSEQまたはDCMCFNSEQ)の値が間違っています。

    DCMCFRTN_72026

    actionに設定したセグメント種別(DCMCFEMI)の値が間違っています。

    DCMCFRTN_72041

    送信するメッセージの内容がありません。

    長さが0バイトのセグメントを送信しています。

SendReceive

説明

同期型でメッセージを送信したあと,同期型でメッセージを受信します。

SendReceiveメソッドでは,相手システムへ送るメッセージのセグメントを送信できます。

メッセージのセグメントを送信すると,SendReceiveメソッドは相手システムからの応答を待ちます。応答が届くと,そのメッセージのセグメントを受信します。

セグメントを送信する領域と受信する領域の形式をそれぞれ示します。Lはヘッダ領域の長さです。バッファ形式1の場合は8バイト,バッファ形式2の場合は4バイトになります。

[図データ]

宣言
【C#の場合】
public static void SendReceive(
  int action,
  string terminalName,
  byte[] sendData,
  int sendDataLength,
  byte[] receiveData,
  ref int receiveDataLength,
  int receiveBufferLength,
  ref int time,
  int watchTime
);
【Visual Basicの場合】
Public Shared Function SendReceive( _
  ByVal action As Integer, _
  ByVal terminalName As String, _
  ByVal sendData() As Byte, _
  ByVal sendDataLength As Integer, _
  ByVal receiveData() As Byte, _
  ByRef receiveDataLength As Integer, _
  ByVal receiveBufferLength As Integer, _
  ByRef time As Integer, _
  ByVal watchTime As Integer _
)
【J#の場合】
public static void SendReceive(
  int action,
  System.String terminalName,
  ubyte[] sendData,
  int sendDataLength,
  ubyte[] receiveData,
  int receiveDataLength,
  int receiveBufferLength,
  int time,
  int watchTime
);
パラメタ
action

メッセージの最終セグメントを送信するかどうか,および使用するバッファ形式を,次の形式で設定します。

DCMCFEMI〔|{DCMCFBUF1|DCMCFBUF2}〕
  • TP1ServerFlags.DCMCFEMI

    最終セグメントを送信する場合に設定します。

    メッセージが単一セグメントの場合も,DCMCFEMIを設定します。メッセージの送信の終了を連絡するために,最後は必ずこの値を設定してください。この値を設定してSendReceiveメソッドを呼び出すと,論理端末からの応答を待ちます。

  • TP1ServerFlags.DCMCFBUF1

    バッファ形式1を使用する場合に設定します。

  • TP1ServerFlags.DCMCFBUF2

    バッファ形式2を使用する場合に設定します。

terminalName

メッセージを出力して応答を入力する論理端末名称を設定します。論理端末名称の長さは最大8バイトです。論理端末名称の後ろにはヌル文字を付けてください。

sendData

送信するセグメントの内容を設定した領域を設定します。一つのセグメントで32000バイトまで送信できます。

メッセージの送信の終了を連絡する場合で,セグメントの内容がないときも,必ず設定してください。

sendDataLength

メッセージの送信の終了を連絡する場合で,セグメントの内容がないときは,0を設定してください。

receiveData

セグメントを受信する領域を設定します。

単一セグメントまたは最終セグメントを送信するSendReceiveメソッドが終了すると,受信したメッセージの先頭セグメントが返されます。

処理終了後,receiveDataにはOpenTP1から値が返されます。

receiveDataLength

受信したメッセージの先頭セグメントの長さが返されます。

receiveBufferLength

セグメントを受信する領域の長さを設定します。

time

メッセージを受信した時刻が,1970年1月1日0時0分0秒からの通算の秒数で返されます。

watchTime

SendReceiveメソッドを呼び出してから終了するまでの最大時間を設定します。

戻り値

なし

例外
Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

  • メッセージ

    例外の内容が出力されます。

    OpenTP1提供関数内でエラーが発生した場合は,次のように出力されます。

    "OpenTP1提供関数実行時にエラーが発生しました。"

    それ以外の場合は,各エラーに対応したメッセージが出力されます。

  • クラス名

    例外が発生したクラス名が出力されます。

  • メソッド名

    例外が発生したメソッド名が出力されます。

  • 引数名(OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力)

    例外が発生する原因となった引数名が出力されます。

  • エラーコード

    発生原因に応じ,次のエラーコードが出力されます。

    エラーコード

    説明

    DCMCFER_INVALID_ARGS

    引数に設定した値が間違っています。

    DCMCFER_PROTO

    プロトコル不正です。

    メッセージ送受信機能の使用が有効になっていません。

    DCMCFRTN_71002

    メッセージキューへの出力処理中に障害が発生しました。

    メッセージキューが閉塞されています。

    メッセージキューが割り当てられていません。

    セグメント長に32000バイトを超える値を設定しています。

    MCFが終了処理中のため,メッセージの送信を受け付けられません。

    DCMCFRTN_71003

    メッセージキューが満杯です。

    DCMCFRTN_71004

    メッセージを格納するバッファをメモリ上に確保できませんでした。

    DCMCFRTN_71108

    メッセージを送信しようとしましたが,送信先の管理テーブルが確保できませんでした。

    プロセスのローカルメモリが不足しています。

    DCMCFRTN_72001

    SendReceiveメソッドを呼び出せない論理端末を設定しています。

    terminalNameに設定した論理端末名称が間違っています。

    DCMCFRTN_72012

    MCFバッファグループ定義のバッファ長が不足しました。

    DCMCFRTN_72013

    受信領域の長さを超えるセグメントを受信しました。受信領域の長さを超えた部分は切り捨てられました。

    DCMCFRTN_72016

    actionに設定したメッセージ種別(DCMCFNORMまたはDCMCFPRIO)の値が間違っています。

    actionに設定した値が間違っています。

    引数に設定した値が間違っています。

    DCMCFRTN_72026

    actionに設定したセグメント種別(DCMCFEMI)の値が間違っています。

    DCMCFRTN_72036

    セグメントを受信する領域の長さが不足しています。バッファ形式1の場合は9バイト以上,バッファ形式2の場合は5バイト以上の領域を確保してください。

    DCMCFRTN_72041

    送信するメッセージの内容がありません。

    長さが0バイトのセグメントを送信しています。

    DCMCFRTN_72073

    非同期メッセージを送信処理中です。

    DCMCFRTN_73001

    出力先の論理端末で障害が発生しました。

    DCMCFRTN_73002

    MCF通信サービスで障害が発生しました。

    DCMCFRTN_73003

    メッセージ受信が仕掛り中です。

    DCMCFRTN_73005

    watchTimeに設定した時間が経過しましたが,論理端末からの応答がありません。

    DCMCFRTN_73010

    メッセージの読み込み時に障害が発生しました。

    メッセージの編集エラーが発生しました。

    DCMCFRTN_73015

    出力先の論理端末は,ほかのUAPで仕掛り中です。

    DCMCFRTN_73018

    watchTimeに設定した値が間違っています。

    DCMCFRTN_73019

    メッセージ送信完了監視タイマのタイムアウトが発生しました。

    DCMCFRTN_73020

    出力先の論理端末は停止しています。