2.3.4 問い合わせメッセージと応答メッセージ(問い合わせ応答形態)
相手システムから問い合わせメッセージを受信したあと,自システムから応答メッセージを送信する形態です。UAP(MHP)のトランザクションの決着と連動してメッセージを送受信します。非トランザクションのMHPの場合は,サービスの終了と連動してメッセージを送受信します。論理端末の端末タイプはany,アプリケーションの型は応答型です。
相手システムからのメッセージを受信すると,TP1/NET/TCP/IPは入力メッセージ編集UOCで編集されたメッセージを入力キューに登録します。同時に,応答型のアプリケーションに対応するUAPを起動して,メッセージを引き渡します。
UAPがAPI(dc_mcf_reply関数またはCBLDCMCF('REPLY△△△'))で送信要求すると,メッセージが出力キューに登録されます。TP1/NET/TCP/IPは出力キューからメッセージを読み出し,出力メッセージ編集UOCで編集されたメッセージを相手システムに送信します。応答メッセージをTCP/IPの送信バッファに書き込み完了した時点で,送信完了としてTP1/NET/TCP/IPは出力キューにある送信済みメッセージのデータを消去します。
出力キューまたは入力キューの割り当て先の指定に関係なく,入力キューに蓄えられた問い合わせメッセージおよび出力キューに蓄えられた応答メッセージは,オンラインシステムが異常終了した場合などの再開始時に引き継がれません。
問い合わせメッセージの受信と応答メッセージの送信を,dc_mcf_receive関数およびdc_mcf_reply関数を使用する場合を例に,次の図に示します。
|
-
相手システムからメッセージを受信します。
-
TP1/NET/TCP/IPは相手システムからのメッセージを入力キューに書き込み,MHPを起動します。
-
MHPはメッセージを受け取ります。
-
MHPは応答メッセージの送信を要求します。
-
TP1/NET/TCP/IPは応答メッセージを送信します。
-
出力キューにある一方送信メッセージのデータを消去します。
以降,問い合わせ応答形態の詳細を説明します。
- 〈この項の構成〉
(1) 問い合わせ応答の開始と終了
問い合わせ応答は,相手システムから問い合わせメッセージを受信し,応答型のアプリケーションを起動することで開始します。そして,UAPから応答メッセージを受け付け,相手システムへの応答メッセージの送信が完了すると問い合わせ応答を終了します。また,障害などによるコネクションの解放および論理端末の閉塞となった場合にも問い合わせ応答を終了します。
問い合わせ応答の開始から問い合わせ応答の終了までを問い合わせ応答中と呼びます。
(2) 問い合わせ応答中のアプリケーション起動
問い合わせ応答中にアプリケーション起動要求をする場合,非応答型または応答型のアプリケーション名を指定できます。ただし,応答型のアプリケーションを起動できるのは一つのサービスで1回だけです。
応答型のアプリケーションを起動した場合,そのサービスでは応答メッセージを送信できません。起動先の応答型アプリケーションで応答メッセージを送信してください。
使用方法の詳細については,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。
(3) 問い合わせ応答中の論理端末へのメッセージ受信
問い合わせ応答中の論理端末が相手システムからメッセージを受信した場合,TP1/NET/TCP/IPはメッセージログ(KFCA14884-W)を出力し,MDELEVTを起動します。
UAP応答待ちの論理端末へのメッセージ受信を次の図に示します。
|
(4) 問い合わせ応答中の論理端末へのメッセージ送信
問い合わせ応答中の論理端末に対してメッセージを送信した場合,メッセージの種類によって動作が異なります。
(a) 一方送信メッセージの場合
一方送信メッセージは出力キューに登録され,APIは正常にリターンします。登録された一方送信メッセージは,TP1/NET/TCP/IPの取り出しを待ちます。応答メッセージの送信完了後に出力キューから読み出し,相手システムに送信します。
(b) 同期型メッセージの場合
APIがリターン値DCMCFRTN_72001またはステータスコード72001でエラーリターンします。
(5) 閉塞中の論理端末への問い合わせメッセージ受信
閉塞中の論理端末が相手システムからメッセージを受信した場合,TP1/NET/TCP/IPはUAPを起動しますが,サービスが終了しても出力キューから応答メッセージを読み出さないで,問い合わせ応答中のままになります。相手システムに応答メッセージを送信する場合,運用コマンド(mcftactle)を入力し,論理端末を閉塞解除してください。
なお,出力キューに滞留した応答メッセージを運用コマンド(mcftdlqle)などで削除した場合,論理端末を閉塞解除しても問い合わせ応答は終了しません。運用コマンド(mcftdctcn)を入力し,コネクションを解放してください。