分散トランザクション処理機能 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 出力先の論理端末は停止しています。