Hitachi

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


Rpc

〈このページの構成〉

Rpcの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

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

説明

Rpcクラスは,クライアント/サーバ形態の通信をするときに使う,OpenTP1のリモートプロシジャコールのメソッドを提供します。

メソッドの一覧

名称

説明

Call(System.String, System.String, System.Byte[], System.Int32, System.Byte[], System.Int32&, System.Int32)

SPP.NETまたはSPPにサービスを要求します。

CallTo(Hitachi.OpenTP1.Server.RpcBindTable, System.String, System.String, System.Byte[], System.Int32, System.Byte[], System.Int32&, System.Int32)

特定のSPP.NETまたはSPPにサービスを要求します。

Close()

OpenTP1の各種メソッドを使うための環境をクローズします。

DiscardFurtherReplies()

非同期応答型RPC(CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_DOMAINを設定)で,まだ返ってきていない応答を,これ以上受信しないことを示すメソッドです。

DiscardSpecificReply(System.Int32)

非同期応答型RPC(CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_NOWAITを設定)で,まだ返ってきていない応答を,これ以上受信しないことを示すメソッドです。

GetCallersAddress()

クライアントUAPのプロセスが稼働するノードアドレスを,サーバUAPで取得します。

GetErrorDescriptor()

非同期応答を特定しないPollAnyRepliesメソッドで例外が発生した直後に呼び出すことで,エラーが発生した非同期応答型RPC要求に対応する記述子を取得します。

GetGatewayAddress()

アプリケーションゲートウェイ型ファイアウォールなどの,ゲートウェイを介してクライアントUAPからのサービス要求を受信したとき,サーバUAPでゲートウェイのノードアドレスを取得します。

GetServicePriolity()

SetServicePriolityメソッドで設定した,サービス要求のスケジュールプライオリティを参照します。

GetTimeout()

現在のサービス要求の応答待ち時間を参照します。

Open()

OpenTP1の各種メソッドを使う準備をします。

PollAnyReplies(System.Int32, System.Int32, System.Int32)

非同期応答型RPC(CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_NOWAITを設定)でサービス要求した結果を受信します。

SetBindTable(Hitachi.OpenTP1.Server.RpcBindTable&, System.String, System.String, System.Int32)

指定されたサービス要求先ノードのノード識別子(nodeIDパラメタの値),または指定されたサービス要求先ノードのホスト名(hostNameパラメタの値)をRpcBindTable構造体に設定し,CallToメソッドの第一引数を作成します。

SetDirectSchedule(Hitachi.OpenTP1.Server.RpcBindTable&, System.String, System.Int32)

指定されたサービス要求先ノードのホスト名(hostNameパラメタの値)と,指定されたスケジュールサービスのポート番号(schedulePortNoパラメタの値)をRpcBindTable構造体に設定し,CallToメソッドの第一引数を作成します。

SetServicePriolity(System.Int32)

サービス要求のプライオリティを設定します。

SetServiceRetry()

実行中のサービスメソッドの処理をリトライします。

SetTimeout(System.Int32)

サービス要求の応答待ち時間を変更します。

メソッドの詳細

Call

説明

SPP.NETまたはSPPにサービスを要求します。Callメソッドを使うときは,要求するサービスがどのノードにあるかを意識する必要はありません。

サービスを要求するときには,サービスグループ名とサービス名をCallメソッドの引数に設定します。この名称に該当するサービスメソッドにサービスが要求されます。

Callメソッドを呼び出すUAPは,トランザクションとして実行していても,していなくてもかまいません。トランザクションとして実行している処理からCallメソッドでサービスを要求するときは,要求するサービスの処理はトランザクションブランチとして稼働します。Callメソッドを使う場合,サーバUAPがあるノードのOpenTP1が稼働していることが前提です。

Callメソッドを実行して応答を待っている間にシグナルを受信しても,メソッドは例外応答しません。

Callメソッドの詳しい説明については,このメソッドの「注意事項」を参照してください。「注意事項」では次に示す項目について説明しています。

  1. Callメソッドの引数について

  2. Callメソッドがエラーになる場合

  3. Callメソッドがエラーになるタイミング

  4. Callメソッドがエラーになったときに再実行する指定

  5. サービス要求に優先度を付ける場合

  6. エラーコードHitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUPとHitachi.OpenTP1.TP1Error.DCRPCER_NET_DOWNとの違い

  7. エラーコードHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDを返させる指定

  8. エラーコードと同期点処理の関係

  9. サービスを要求するときの注意

  10. ドメイン修飾をしてサービスを要求する場合

宣言
【C#の場合】
public static int Call(
  string serviceGroupName,
  string serviceName,
  byte[] inputBuffer,
  int inputBuffer_len,
  byte[] outputBuffer,
  ref int outputBuffer_len,
  int flags
);
【Visual Basicの場合】
Public Shared Function Call( _
  ByVal serviceGroupName As String, _
  ByVal serviceName As String, _
  ByVal inputBuffer() As Byte, _
  ByVal inputBuffer_len As Integer, _
  ByVal outputBuffer() As Byte, _
  ByRef outputBuffer_len As Integer, _
  ByVal flags As Integer _
) As Integer
【J#の場合】
public static int Call(
  System.String serviceGroupName,
  System.String serviceName,
  ubyte[] inputBuffer,
  int inputBuffer_len,
  ubyte[] outputBuffer,
  int outputBuffer_len,
  int flags
);
パラメタ
serviceGroupName

SPP.NETまたはSPPのサービスグループ名を,31バイト以内の文字列で設定します。

ドメイン修飾をしてサービスを要求するときは,サービスグループ名の後ろに@(アットマーク)とDNSのドメイン名を付けて設定してください。

serviceName

SPP.NETまたはSPPのサービス名を,31バイト以内の文字列で設定します。

inputBuffer

サービスの入力パラメタを設定します。

inputBuffer_len

サービスの入力パラメタ長を設定します。

outputBuffer

サービスメソッドから返ってくる応答を格納します。

outputBuffer_len

サービスの応答の長さを設定します。

非応答型RPCの場合も,サービスの応答の長さを指定する必要があります。非応答型RPCの場合,サービスの応答の長さには0を設定します。

flags

RPCの形態とオプションを,次に示す形式で設定します。

{TP1ServerFlags.DCNOFLAGS|
TP1ServerFlags.DCRPC_NOWAIT|
TP1ServerFlags.DCRPC_NOREPLY|
TP1ServerFlags.DCRPC_CHAINED}
〔|TP1ServerFlags.DCRPC_TPNOTRAN〕
〔|TP1ServerFlags.DCRPC_DOMAIN〕

オプション

説明

TP1ServerFlags.DCNOFLAGS

同期応答型RPC

TP1ServerFlags.DCRPC_NOWAIT

非同期応答型RPC

TP1ServerFlags.DCRPC_NOREPLY

非応答型RPC

TP1ServerFlags.DCRPC_CHAINED

連鎖RPC

TP1ServerFlags.DCRPC_TPNOTRAN

トランザクション処理からのサービス要求で,要求先の処理をトランザクションにしない場合に設定します。

TP1ServerFlags.DCRPC_TPNOTRANオプションを設定すると,トランザクションの処理からのサービス要求でも,サービス関数およびサービスメソッドの処理はトランザクションになりません。

TP1ServerFlags.DCRPC_DOMAIN

サービスグループ名をドメイン修飾した場合に指定します。

ドメイン修飾をしたRPCはトランザクションブランチにできません。

そのため,トランザクションの処理からCallメソッドを使う場合は,必ずTP1ServerFlags.DCRPC_TPNOTRANオプションと一緒に指定してください。

TP1ServerFlags.DCRPC_TPNOTRANオプションとTP1ServerFlags.DCRPC_DOMAINオプションは,RPCの形態に付けて設定します。

(例1)

同期応答型RPCでトランザクションにしないサービス要求をする場合,flagsパラメタには「TP1ServerFlags.DCNOFLAGS|TP1ServerFlags.DCRPC_TPNOTRAN」と設定します。

(例2)

トランザクションの処理から,同期応答型RPCでドメイン修飾をしたサービス要求をする場合,flagsパラメタには「TP1ServerFlags.DCNOFLAGS|TP1ServerFlags.DCRPC_TPNOTRAN|TP1ServerFlags.DCRPC_DOMAIN」と設定します。

戻り値

非同期応答型RPCの場合は,正の整数は記述子です。それ以外の場合は,意味を持ちません。

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

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

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_INVALID_ARGS

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

    DCRPCER_INVALID_REPLY

    サービスメソッドがOpenTP1に返した応答の長さが,1から1048576までの範囲にありません。

    DCRPCER_MESSAGE_TOO_BIG

    inputBuffer_lenパラメタに設定した入力パラメタ長が,最大値を超えています。

    DCRPCER_NET_DOWN

    ネットワークに障害が起こりました。

    DCRPCER_NOT_TRN_EXTEND

    トランザクション処理の連鎖RPCを使ったあとで,flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定したCallメソッドでサービスを要求しています。

    DCRPCER_NO_BUFS

    メモリが不足しました。

    または,サーバのメッセージ格納領域に十分な空きがないため,サービス要求を受け付けられませんでした。

    DCRPCER_NO_BUFS_AT_SERVER

    設定したサービスで,メモリが不足しました。

    DCRPCER_NO_BUFS_RB

    メモリが不足しました。このエラーコードが返った場合は,トランザクションブランチをコミットできません。

    DCRPCER_NO_PORT

    ドメイン修飾をしてサービスを要求しましたが,ドメイン代表スケジュールサービスのポート番号が見つかりません。

    DCRPCER_NO_SUCH_DOMAIN

    ドメイン修飾をしたサービスグループ名の,ドメイン名が間違っています。

    DCRPCER_NO_SUCH_SERVICE

    serviceNameパラメタに設定したサービス名は,定義されていません。

    DCRPCER_NO_SUCH_SERVICE_GROUP

    serviceGroupNameパラメタに設定したサービスグループは,定義されていません。

    DCRPCER_OLTF_INITIALIZING

    サービスを要求されたノードにあるOpenTP1は,開始処理中です。

    DCRPCER_OLTF_NOT_UP

    serviceNameパラメタに設定したサービスがあるノードのOpenTP1が稼働していません。異常終了,停止中,終了処理中,または通信障害が起こったことが考えられます。

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

    DCRPCER_REPLY_TOO_BIG

    返ってきた応答が,クライアントUAPで用意した領域に入り切りません。

    DCRPCER_REPLY_TOO_BIG_RB

    返ってきた応答が,クライアントUAPで用意した領域に入り切りません。このエラーコードが返った場合は,トランザクションブランチをコミットできません。

    DCRPCER_SECCHK

    サービスを要求されたSPP.NETまたはSPPは,OpenTP1のセキュリティ機能で保護されています。Callメソッドでサービスを要求したUAPには,SPP.NETまたはSPPへのアクセス権限がありません。

    DCRPCER_SERVER_BUSY

    サービスを要求されたソケット受信型サーバが,サービス要求を受け取れません。

    DCRPCER_SERVICE_CLOSED

    serviceNameパラメタに設定したサービス名のサービスがあるサービスグループは,閉塞しています。

    DCRPCER_SERVICE_NOT_UP

    serviceNameパラメタに設定したサービスのUAPプロセスが,稼働していません。

    サービス要求の応答待ち時間に0を指定した場合に,サービスを要求されたSPP.NETまたはSPPが,処理を完了する前に異常終了しました。

    DCRPCER_SERVICE_TERMINATED

    サービスを要求されたSPP.NETまたはSPPが,処理を完了する前に異常終了しました。このエラーコードは,ユーザサービス定義のrpc_extend_functionオペランドに"00000001"を指定したクライアントUAPの場合にだけ返されます。rpc_extend_functionオペランドに"00000000"を指定,またはオペランドを省略した場合は,このエラーコードは返らないで,DCRPCER_TIMED_OUTエラーコードまたはDCRPCER_SERVICE_NOT_UPエラーコードが返されます。

    DCRPCER_SERVICE_TERMINATING

    serviceNameパラメタに設定したサービスは,終了処理中です。

    DCRPCER_SYSERR

    システムエラーが発生しました。

    DCRPCER_SYSERR_AT_SERVER

    設定したサービスで,システムエラーが発生しました。

    DCRPCER_SYSERR_AT_SERVER_RB

    設定したサービスで,システムエラーが発生しました。このエラーコードが返った場合は,トランザクションブランチをコミットできません。

    DCRPCER_SYSERR_RB

    システムエラーが発生しました。このエラーコードが返った場合は,トランザクションブランチをコミットできません。

    DCRPCER_TESTMODE

    オンラインテスタを使っている環境で,テストモードのUAPからテストモードでないSPPへサービスを要求しています。または,テストモードでないUAPからテストモードのSPPへサービスを要求しています。

    DCRPCER_TIMED_OUT

    Callメソッドの処理が時間切れ(タイムアウト)になりました。

    サービスを要求されたSPP.NETまたはSPPが,処理を完了する前に異常終了しました。

    DCRPCER_TRNCHK

    ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境で,複数のSPP.NETまたはSPPのトランザクション属性が一致していません。または,負荷を分散する先のノードにあるOpenTP1のバージョンが,クライアントのOpenTP1のバージョンよりも低いため,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を実行できません。

    このエラーコードは,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を使っているSPP.NETまたはSPPにサービスを要求した場合にだけ返されます。

    DCRPCER_TRNCHK_EXTEND

    同時に起動できるトランザクションブランチの数を超えたため,トランザクションブランチを開始できません。

    一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため,トランザクションブランチを開始できません。

    トランザクション内でドメイン修飾をしたサービス要求で,flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANオプションを設定していません。

    リソースマネジャ(RM)でエラーが発生したため,トランザクションブランチを開始できません。

注意事項

システム共通定義のall_nodeオペランドで指定したドメイン以外のOpenTP1システムにトランザクショナルRPCを行う場合,自ドメインおよび他ドメイン内のすべてのOpenTP1システムのノード識別子(システム共通定義のnode_idオペランド)は一意にする必要があります。また,すべてのOpenTP1システムのバージョンは03-02以降にする必要があります。これらの条件を満たしていない場合,トランザクションが正しく回復できなくなることがあります。

(1)Callメソッドの引数について

Callメソッドの引数について説明します。

・サーバUAPに渡す値

サービスを要求するときは,サービスメソッドから返ってくる応答の領域をoutputBufferパラメタに確保しておきます。クライアントUAPでは,Callメソッドに次の値を設定しておきます。

  • 入力パラメタ(inputBufferパラメタ)

  • 入力パラメタ長(inputBuffer_lenパラメタ)

  • 応答の長さ(outputBuffer_lenパラメタ)

入力パラメタ,入力パラメタ長,および応答の長さは,クライアントUAPのCallメソッドで設定した値が,そのままサービスメソッドに渡されます。

文字コードや数字の表記形式を変えたい場合は,クライアントUAP,または要求されたサービスメソッドの処理で変換してください。応答を返さないサービスメソッドのサービスを要求するときは,応答の長さを設定しても無視されます。

入力パラメタ長と応答の長さの最大値は,クラスリファレンスのTP1ServerLimitsのDCRPC_MAX_MESSAGE_SIZEで宣言しています。最大値を確認する場合は,クラスリファレンスの内容を参照してください。

・サーバUAPから戻ってくる値

サービスメソッドの処理が終了して応答が戻ってくると,次の値を参照できます。

  • サービスメソッドの応答(outputBufferパラメタ)

  • サービスメソッドの応答の長さ(outputBuffer_lenパラメタ)

outputBuffer_lenパラメタの値はサービスメソッドから実際に返ってきた応答の長さです。outputBufferパラメタとoutputBuffer_lenパラメタを参照できる場合を次に示します。

RPCの形態

outputBufferパラメタとoutputBuffer_lenパラメタを参照できる場合

同期応答型RPC,または連鎖RPC

Callメソッドが応答を返したあと。

非同期応答型RPC

PollAnyRepliesメソッドが該当する応答を受け取って応答を返したあと。

outputBuffer_lenパラメタは参照できません。

非応答型RPC

outputBufferパラメタとoutputBuffer_lenパラメタは参照できません。

Callメソッド,またはPollAnyRepliesメソッドが例外応答した場合には,outputBufferパラメタとoutputBuffer_lenパラメタは参照できません。

返ってきた応答が,クライアントUAPで確保した応答の領域(outputBufferパラメタの値)よりも大きい場合は,Hitachi.OpenTP1.TP1Error.DCRPCER_REPLY_TOO_BIGで例外応答します。

・flagsパラメタに設定する値

flagsパラメタに設定した値とCallメソッドの実行結果について説明します。

RPCの形態

Callメソッドの実行結果

同期応答型RPC

(flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定)

Callメソッドは,応答が返るか,通信先でエラーが起こるまで応答を返しません。

非同期応答型RPC

(flagsパラメタにTP1ServerFlags.DCRPC_NOWAITを設定)

Callメソッドは,すぐに応答を返します。ただし,応答を参照できるのは,PollAnyRepliesメソッドで非同期に応答を受信したあとです。

応答(outputBufferパラメタの値)の領域は,次に示す方法で非同期応答型RPCを終了するまで,解放しないでください。

  • PollAnyRepliesメソッドで応答を受け取る。

  • DiscardFurtherRepliesメソッドで応答の受信を拒否する。

  • トランザクションの処理からサービスを要求した場合で,コミット,またはロールバックする。

トランザクションの処理で非同期応答型RPCを使う場合,同期点処理(コミット,またはロールバック)前にPollAnyRepliesメソッドで応答を受け取ってください。同期点処理後には,PollAnyRepliesメソッドで応答は受信できません。PollAnyRepliesメソッドが受信する応答を特定する場合は,Callメソッドが応答を返したときに返された正の整数(記述子)を,PollAnyRepliesメソッドの引数に設定します。受信する応答を特定する場合は,Callメソッドのリターン値を保持しておいてください。

なお,非トランザクションの処理で,同期点処理後に応答を受け取りたい場合は,システムサービス定義のrpc_extend_functionオペランドで該当するオプションを指定する必要があります。

非応答型RPC

(flagsパラメタにTP1ServerFlags.DCRPC_NOREPLYを設定)

Callメソッドは,サービスメソッドの処理が終わるのを待たないで,すぐに応答を返します。サービスメソッドは応答を返さないサービスとみなされます。そのため,サービスメソッドが実行されたかどうかは,サービスを要求したUAPからはわかりません。TP1ServerFlags.DCRPC_NOREPLYを設定した場合は,応答(outputBufferパラメタの値)と応答の長さ(outputBuffer_lenパラメタの値)の値は参照できません。

連鎖RPC

(flagsパラメタにTP1ServerFlags.DCRPC_CHAINEDを設定)

Callメソッドは,応答が返るか,通信先でエラーが起こるまで応答を返しません。連鎖RPCで同じサービスグループに属するサービスを複数回要求する場合は,最初の要求時と同じプロセスで実行できます。

連鎖RPCを使う場合には,次に示す制限があります。

  • 2回目以降のCallメソッドでは,ユーザサーバおよびサービスの閉塞を検出できません。

  • 2回目以降のCallメソッドでサービスメソッドの処理で異常が起こった場合には,ユーザサーバ全体が閉塞します。サービス単位では閉塞しません。

(2)Callメソッドがエラーになる場合

Callメソッドの例外応答する理由について説明します。

サーバUAPがあるノードのOpenTP1が稼働していない場合サービスを要求されるOpenTP1が稼働していない場合は,Callメソッドは次に示すエラーコードのどれかで例外応答します。

  • Hitachi.OpenTP1.TP1Error.DCRPCER_NET_DOWN

  • Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_INITIALIZING

  • Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_NOT_UP

  • Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UP

・サーバUAPが稼働していない場合

サーバUAPがマルチサーバの場合,異常終了中,または部分回復処理中であっても,サービス要求はOpenTP1で新しく起動されたプロセスで実行されます。ただし,次に示す場合は,Callメソッドは例外応答します。

  • 閉塞しているSPP.NETまたはSPPへはサービスを要求できません。サービスグループが閉塞されている場合は,Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_CLOSEDで例外応答します。

  • ユーザサーバの停止コマンド(dcsvstopコマンド)またはOpenTP1の停止コマンド(dcstopコマンド)で,SPP.NETまたはSPPが終了処理中もしくは終了している場合は,次に示すどれかで例外応答します。

    ・Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUP

    ・Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_CLOSED

    ・Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATING

    上記のうち,どのエラーコードが返るかは,Callメソッドを呼び出したタイミングで決まります。

  • OpenTP1が開始処理中の場合は,Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_INITIALIZINGで例外応答します。この場合は,サーバUAPまたはOpenTP1が起動完了したあとに正常にサービスを要求できることがあります。OpenTP1は,メッセージID KFCA01809-Iのメッセージログが出力されると起動を完了するので,このメッセージが表示されてから再びサービスを要求してください。

・ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境でサービスを要求した場合

ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境では,該当するサービスのスケジュールが閉塞していると,OpenTP1が自動的にほかのノードにサービス要求を転送します。ただし,次に示す条件の場合,CallメソッドはHitachi.OpenTP1.TP1Error.DCRPCER_TRNCHKで例外応答します。

  • トランザクション処理の場合,転送しようとした先のノードにあるサービスのトランザクション属性が,閉塞していたサービスと一致していないとき。

  • 転送しようとした先のノードにあるOpenTP1のバージョンが,サービスを要求したOpenTP1のノードのバージョンよりも古いとき。

上記の例外応答が起こった場合は,次に示す処置をしてください。

  • ノード間負荷バランス機能およびノード間負荷バランス拡張機能を構成する複数のSPP.NETまたはSPPのトランザクション属性を一致させてください。

  • ノード間負荷バランス機能およびノード間負荷バランス拡張機能を構成する複数のOpenTP1のバージョンを一致させてください。

・ソケット受信型サーバへサービスを要求する場合

ソケット受信型サーバでは,ユーザサービス定義のmax_socket_msgオペランドおよびmax_socket_msglenオペランドの指定で,データの輻輳制御をしています。そのため,定義した値を超えた場合,サービス要求を受信できないことがあります。

このときCallメソッドは,Hitachi.OpenTP1.TP1Error.DCRPCER_SERVER_BUSYで例外応答します。この値が返った場合,クライアントUAPは,適当な時間を置いてから再実行すると,サービスを要求できることがあります。

・連鎖RPCを使った場合

トランザクションとして処理している連鎖RPCを使っているUAPから,同じサーバUAPにトランザクションでないCallメソッドを呼び出すと,Hitachi.OpenTP1.TP1Error.DCRPCER_NOT_TRN_EXTENDで例外応答します。

・オンラインテスタを使っている場合

オンラインテスタを使っている場合に,テストモードのUAPとテストモードでないUAP間でCallメソッドを呼び出すと,Hitachi.OpenTP1.TP1Error.DCRPCER_TESTMODEで例外応答します。

・セキュリティ機能を使っている場合

Callメソッドを呼び出したときに,目的のサービスがセキュリティ機能で保護されていて,Callメソッドを呼び出したクライアントUAPにSPP.NETまたはSPPへのアクセス権がない場合は,Hitachi.OpenTP1.TP1Error.DCRPCER_SECCHKで例外応答します。

(3)Callメソッドがエラーになるタイミング

サービスを要求されたSPP.NETまたはSPPが異常終了した場合,クライアントUAPでエラーが返るタイミングについて説明します。

RPCの形態

エラーが返るタイミング

同期応答型RPCまたは連鎖RPC

(flagsパラメタにTP1ServerFlags.DCNOFLAGSまたはTP1ServerFlags.DCRPC_CHAINEDを設定)

サービスを実行するSPP.NETまたはSPPが処理の終わる前に異常終了すると,Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTで例外応答します。

クライアントUAPのユーザサービス定義のwatch_timeオペランドに,応答を受信するまで待ち続ける指定をしている場合は,Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UPで例外応答します。

非同期応答型RPC

(flagsパラメタにTP1ServerFlags.DCRPC_NOWAITを設定)

サービスを実行するSPP.NETまたはSPPが処理の終わる前に異常終了すると,上記のエラーコードがPollAnyRepliesメソッドに例外応答します。

非応答型RPC

(flagsパラメタにTP1ServerFlags.DCRPC_NOREPLYを設定)

サーバUAPの異常終了を,クライアントUAPでは検知できません。

・クライアントUAPの時間監視でエラーになる場合

次に示す場合には,クライアントUAPのユーザサービス定義のwatch_timeオペランドに指定した時間が経過したあとで,Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTで例外応答します。

  • SPP.NETまたはSPPがあるノードのOpenTP1全体が異常終了した場合

  • サービス要求のデータをサーバUAPが受信する前,またはサーバUAPの処理が完了してからクライアントUAPが結果を受信する前に障害が起こった場合

(4)Callメソッドがエラーになったときに再実行する指定

開始処理中,または系切り替え中などでサービス要求先のOpenTP1が起動していない場合でも,Callメソッドを通信エラーとしないで,OpenTP1でサービス要求を再実行させられます。

サービス要求を再実行させる場合は,システム共通定義のrpc_retryオペランドにYを指定してください。サービス要求の再実行回数および再実行間隔は,システム共通定義のrpc_retry_countオペランドとrpc_retry_intervalオペランドで指定します。システム共通定義で指定した再実行回数を超えた場合は,Callメソッドは次に示すどれかで例外応答します。

  • Hitachi.OpenTP1.TP1Error.DCRPCER_NET_DOWN

  • Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUP

  • Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_INITIALIZING

  • Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_NOT_UP

  • Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UP

(5)サービス要求に優先度を付ける場合

サービス要求のスケジュールプライオリティは,Callメソッドを呼び出す直前に,SetServicePriolityメソッドを呼び出して設定します。

プライオリティを設定しない場合は,スケジュールサービスの省略時の解釈で,サービス要求の優先度が決まります。

(6)エラーコードHitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUPとHitachi.OpenTP1.TP1Error.DCRPCER_NET_DOWNの違い

上記のエラーコードは,該当するサービスグループ名のユーザサーバが見つからなかった場合に返されます。

  • Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUP

    システム共通定義のall_nodeオペランドに指定した,すべてのノードを探して見つからなかったことを示します。

  • Hitachi.OpenTP1.TP1Error.DCRPCER_NET_DOWN

    探している途中で,all_nodeオペランドに指定した一つ以上のノードとの通信で障害が起こったことを示します。これは,該当するOpenTP1システムがなかった場合も含みます。

(7)エラーコードHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDを返させる指定

サービスを要求されたSPP.NETまたはSPPが,処理を完了する前に異常終了したことをHitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTまたはHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UP以外のエラーコードで判別したい場合には,ユーザサービス定義のrpc_extend_functionオペランドに"00000001"を指定します。

この指定をすると,上記の例外発生時にHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDが返されるようになります。rpc_extend_functionオペランドに"00000000"を指定するか,またはオペランドを省略した場合は,Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDは返らないで,Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTまたはHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UPが返されます。

(8)エラーコードと同期点処理の関係

Callメソッドの応答内容と同期点処理(コミット,ロールバック)の関係について説明します。ここで説明する内容は,サービス要求がトランザクション処理になる場合に該当します。トランザクションでないサービス要求(flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定した場合も含む)には該当しません。

・Callメソッドが例外応答してもコミットとなる場合

サービスを要求されたサービスメソッドの異常終了,ノードの障害,ネットワーク障害などの場合でも,Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTが返されることがあります。クライアントUAPがトランザクション処理でない場合は,Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTが返っても,要求したサービスがあるサービスメソッドは正常に終了していて,データベースへの更新などが実行されていることもあります。

・ロールバック処理が必要な例外応答値

トランザクション処理から呼び出したCallメソッドが例外応答した場合,エラーコードによっては,必ずトランザクションがロールバック(サーバUAPがrollback_only状態)になります。この場合,コミットのメソッド,またはロールバックのメソッドのどちらを使っても,必ずロールバックになります。必ずロールバックになるCallメソッドのエラーコードを次に示します。

  • Hitachi.OpenTP1.TP1Error.DCRPCER_INVALID_REPLY

  • Hitachi.OpenTP1.TP1Error.DCRPCER_NO_BUFS_AT_SERVER

  • Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE

  • Hitachi.OpenTP1.TP1Error.DCRPCER_REPLY_TOO_BIG_RB

(9)サービスを要求するときの注意
  • Callメソッドに設定するサービスグループ名およびサービス名は,サーバUAPの環境設定で指定しておいてください。誤ったサービスグループ名またはサービス名をCallメソッドに設定してサービスを要求すると,Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUPまたはHitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICEで例外応答します。

    応答を返さないサービスメソッドの場合は,Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICEでは返しません。

  • サーバUAPは,クライアントUAPとは別のプロセスで実行します。

    そのため,通常のメソッドの呼び出しや手続き呼び出しとは,次の点が異なります。

    ・OSがクライアントUAPのプロセスに与えている属性は,サーバUAPへは引き継がれません(例えば,環境変数,スケジュールの優先順位(nice値)など)。

    ・クライアントUAPのノードで設定したOpenTP1の環境設定は,サーバUAPのOpenTP1へは引き継がれません(例えば,トランザクション属性の指定有無,トランザクションブランチの限界経過時間,スケジュールの優先順位など)。

  • 入力パラメタ(inputBufferパラメタ)およびサービスメソッドの応答(outputBufferパラメタ)に,同じバッファ領域を設定しないでください。

  • flagsパラメタにTP1ServerFlags.DCRPC_NOREPLYを設定した場合には,次に示すエラーコードは返りません。

    ・起こらないエラー

     Hitachi.OpenTP1.TP1Error.DCRPCER_INVALID_REPLY

     Hitachi.OpenTP1.TP1Error.DCRPCER_REPLY_TOO_BIG

    ・起こっても検出できないエラー

     Hitachi.OpenTP1.TP1Error.DCRPCER_NO_BUFS_AT_SERVER

     Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE

     Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_INITIALIZING

     Hitachi.OpenTP1.TP1Error.DCRPCER_SECCHK

     Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_CLOSED

     Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATING

     Hitachi.OpenTP1.TP1Error.DCRPCER_SYSERR_AT_SERVER

    また,エラー発生時にOpenTP1にメッセージを出力することもありません。エラーを検出しなければならない場合,flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定する(同期応答型RPC)ことを検討してください。

  • トランザクションの処理からCallメソッドでサービスグループを呼び出すと,トランザクションが決着するまで一つのSPP.NETまたはSPPを占有します。

    同じトランザクションの処理から,Callメソッドで同じサービスを複数回使う場合は,次に示すようにしてください。

    ・使う回数に応じて,ユーザサービス定義のbalance_countオペランドおよびparallel_countオペランドの指定値を見積もり直す。

    ・プロセスが増えないように,連鎖RPCでサービスを要求する。

    balance_countオペランドおよびparallel_countオペランドの指定値に誤りがあると,トランザクションが異常終了したり,デッドロックが発生したりする場合があります。

  • 非同期応答型RPCを使う場合には,PollAnyRepliesメソッドですべての非同期の応答を受信するか,DiscardFurtherRepliesメソッドで非同期の応答を拒否するまで,サーバUAP(SPP.NETまたはSPP)を占有する場合があります。これは,トランザクションの処理の場合にもトランザクションの処理ではない場合にも起こります。非同期応答型RPCを使う場合には,使う回数に応じて,常駐プロセス数の指定を増やしておいてください。

    非同期応答型RPCは,SPP.NETまたはSPPを占有すること以外にも多くの資源を必要とします。UAPの処理効率が下がったり,必要ないSPP.NETまたはSPPが開始されたりすることを防ぐため,非同期応答型RPCのCallメソッドを使ったあとには,確実に応答を受信するか,受信を拒否するかしてください。

  • 非同期応答型RPCで連続して複数回使ったあとで応答を受け取る場合には,非同期応答型RPCのサービスを要求するときに,それぞれ異なる応答格納領域(outputBufferパラメタ)を設定してください。同じ領域を設定すると,あとから来た応答に上書きされて,応答を正しく受け取れなくなります。

  • 非同期応答型RPCでサービス要求したサーバUAP(SPP.NETまたはSPP)は,非同期応答型RPCを実行したプロセスがPollAnyRepliesメソッドを発行したかどうかに関係なく,サービスメソッド実行後にすぐに応答を送信します。PollAnyRepliesメソッドを発行しないで,複数回の非同期応答型RPCを大量に実行すると,SPP.NETまたはSPPから送信される応答がTCP/IPのバッファにたまり,SPP.NETまたはSPPの応答送信処理が失敗する場合があります。SPP.NETまたはSPPで応答送信処理が失敗すると,非同期応答型RPC発行元では,PollAnyRepliesメソッドを発行しても,SPP.NETまたはSPPから応答を受信することはできません。

  • トランザクション属性の非同期応答型RPC,非応答型RPCを大量に実行すると,SPP.NETまたはSPPから送信されるトランザクションに関する電文を受信できなくなり,トランザクションがロールバックする場合があります。

(10)ドメイン修飾をしてサービスを要求する場合

ドメイン修飾したサービスグループ名を設定すると,DNSのドメイン内にあるOpenTP1のサービスを要求できます。ドメイン修飾をしたサービスグループ名は,サービスグループ名の後ろに,@とDNSのドメイン名を付けて設定します。

・ドメイン修飾をしてサービスを要求するときの注意
  • ドメイン修飾をしてサービスを要求する場合は,CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_DOMAINを設定します。TP1ServerFlags.DCRPC_DOMAINを設定しないでドメイン修飾をしたサービスグループ名を設定すると,CallメソッドはHitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUPで例外応答します。

  • ドメイン修飾をしたRPCの場合,Callメソッドを呼び出したプロセスがトランザクションの処理でも,トランザクションを拡張できません。そのため,トランザクションの処理からドメイン修飾をしてサービスを要求する場合は,flagsパラメタにTP1ServerFlags.DCRPC_NOTRANを指定して,トランザクションを拡張しないようにしてください。なお,ドメイン名に自ドメインを設定した場合でも,トランザクションを拡張できません。

  • ドメイン修飾をしたRPCでは,キュー受信型サーバにだけサービスを要求できます。ソケット受信型サーバへは,ドメイン修飾をしたサービス要求はできません。

  • ドメイン修飾をしたサービス要求では,namdomainsetupコマンドで登録したホストで起動されるドメイン代表スケジュールサービスへサービス要求を送信します。ドメイン代表スケジュールサービスのポート番号は,〈Windowsディレクトリ〉\System32\drivers\etc\servicesから取得します。サービス要求の送信で障害が起こった場合は,namdomainsetupコマンドで複数のホスト名を登録していれば,順次送信を試みます。ドメイン修飾をしたRPCが正常に終了しても,ドメイン代表スケジュールサービスへの送信で障害が起こっている場合もあります。

・ドメイン修飾をしたサービス要求をする前の準備

ドメイン修飾をしたRPCでは,次に示す環境設定をしてください。

  1. DNSのドメインデータファイルに,ドメイン代表スケジュールサービスを起動するホスト名を登録します。登録するときは,namdomainsetupコマンドを使います。

  2. ドメイン修飾をしたサービス要求をするOpenTP1を起動するホストの〈Windowsディレクトリ〉\System32\drivers\etc\servicesに,ドメイン代表スケジュールサービスのポート番号を設定します。ポート番号は,次の形式で記述してください。

    OpenTP1scd ポート番号/tcp

  3. ドメイン代表スケジュールサービスを起動するOpenTP1のスケジュールサービス定義のscd_portオペランドに,ドメイン代表スケジュールサービスのポートを指定します。

CallTo

説明

特定のSPP.NETまたはSPPにサービスを要求します。Callメソッドと同様にサービスグループ名とサービス名を引数に設定するのに加え,ホスト名またはノード識別子を指定したRpcBindTable構造体に指定したホスト名またはノード識別子は,サービス要求先を特定する検索キーとして使用します。この設定に該当するサービスメソッドにサービスが要求されます。

ただし,ドメイン修飾をしてサービスを要求できません。それ以外は,Callメソッドの機能と同じです。

なお,この機能は,TP1/Extension 1をインストールしていることが前提です。TP1/Extension 1をインストールしていない場合の動作は保証できません。

宣言
【C#の場合】
public static int CallTo(
  Hitachi.OpenTP1.Server.RpcBindTable direction,
  string serviceGroupName,
  string serviceName,
  byte[] inputBuffer,
  int inputBuffer_len,
  byte[] outputBuffer,
  ref int outputBuffer_len,
  int flags
);
【Visual Basicの場合】
Public Shared Function CallTo( _
  ByVal direction As Hitachi.OpenTP1.Server.RpcBindTable, _
  ByVal serviceGroupName As String, _
  ByVal serviceName As String, _
  ByVal inputBuffer() As Byte, _
  ByVal inputBuffer_len As Integer, _
  ByVal outputBuffer() As Byte, _
  ByRef outputBuffer_len As Integer, _
  ByVal flags As Integer _
) As Integer
【J#の場合】
public static int CallTo(
  Hitachi.OpenTP1.Server.RpcBindTable direction,
  System.String serviceGroupName,
  System.String serviceName,
  ubyte[] inputBuffer,
  int inputBuffer_len,
  ubyte[] outputBuffer,
  int outputBuffer_len,
  int flags
);
パラメタ
direction

サービス要求先を特定する検索キーを格納するRpcBindTable構造体を指定します。検索のキーはホスト名またはノード識別子のどちらかです。

serviceGroupName

SPP.NETまたはSPPのサービスグループ名を設定します。

serviceName

SPP.NETまたはSPPのサービス名を設定します。

inputBuffer

サービスの入力パラメタを設定します。

inputBuffer_len

サービスの入力パラメタ長を設定します。

outputBuffer

サービスメソッドから返ってくる応答を格納する領域を設定します。

outputBuffer_len

サービスメソッドから返ってくる応答を格納する領域長を設定します。

flags

RPCの形態とオプションを,次に示す形式で設定します。

{TP1ServerFlags.DCNOFLAGS|
TP1ServerFlags.DCRPC_NOWAIT|
TP1ServerFlags.DCRPC_NOREPLY|
TP1ServerFlags.DCRPC_CHAINED}
〔|TP1ServerFlags.DCRPC_TPNOTRAN〕
〔|TP1ServerFlags.DCRPC_DOMAIN〕

オプション

説明

TP1ServerFlags.DCNOFLAGS

同期応答型RPC

TP1ServerFlags.DCRPC_NOWAIT

非同期応答型RPC

TP1ServerFlags.DCRPC_NOREPLY

非応答型RPC

TP1ServerFlags.DCRPC_CHAINED

連鎖RPC

TP1ServerFlags.DCRPC_TPNOTRAN

トランザクション処理からのサービス要求で,要求先の処理をトランザクションにしない場合に設定します。

TP1ServerFlags.DCRPC_TPNOTRANオプションを設定すると,トランザクションの処理からのサービス要求でも,サービス関数およびサービスメソッドの処理はトランザクションになりません。

TP1ServerFlags.DCRPC_DOMAIN

サービスグループ名をドメイン修飾した場合に指定します。

ドメイン修飾をしたRPCはトランザクションブランチにできません。

そのため,トランザクションの処理からCallメソッドを使う場合は,必ずTP1ServerFlags.DCRPC_TPNOTRANオプションと一緒に指定してください。

TP1ServerFlags.DCRPC_TPNOTRANオプションとTP1ServerFlags.DCRPC_DOMAINオプションは,RPCの形態に付けて設定します。

(例1)

同期応答型RPCでトランザクションにしないサービス要求をする場合,flagsパラメタには「TP1ServerFlags.DCNOFLAGS|TP1ServerFlags.DCRPC_TPNOTRAN」と設定します。

(例2)

トランザクションの処理から,同期応答型RPCでドメイン修飾をしたサービス要求をする場合,flagsパラメタには「TP1ServerFlags.DCNOFLAGS|TP1ServerFlags.DCRPC_TPNOTRAN|TP1ServerFlags.DCRPC_DOMAIN」と設定します。

戻り値

正常に終了しました。

非同期応答型RPCの場合は,正の整数は「記述子」です。

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

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

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_INVALID_ARGS

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

    RpcBindTable構造体のHostNameプロパティに指定されたホスト名を,DNSなどでIPアドレスと対応づけできません。

    CallToメソッドの第一引数に指定したRpcBindTable構造体が,SetDirectScheduleメソッドで作成されていて,SetDirectScheduleメソッドのhostNameパラメタに0を指定しています。

    DCRPCER_INVALID_REPLY

    サービスメソッドがOpenTP1に返した応答の長さが,1から1048576の範囲にありません。

    DCRPCER_MESSAGE_TOO_BIG

    inputBuffer_lenパラメタに設定した入力パラメタ長が,最大値を超えています。

    DCRPCER_NET_DOWN

    ネットワークに障害が起こりました。

    DCRPCER_NOT_TRN_EXTEND

    トランザクション処理の連鎖RPCを使ったあとで,flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定したCallメソッドでサービスを要求しています。

    DCRPCER_NO_BUFS

    メモリが不足しました。

    または,サーバのメッセージ格納領域に十分な空きがないため,サービス要求を受け付けられませんでした。

    DCRPCER_NO_BUFS_AT_SERVER

    設定したサービスで,メモリが不足しました。

    DCRPCER_NO_BUFS_RB

    メモリが不足しました。このエラーコードが返った場合は,トランザクションブランチをコミットできません。

    DCRPCER_NO_PORT

    ドメイン修飾をしてサービスを要求しましたが,ドメイン代表スケジュールサービスのポート番号が見つかりません。

    DCRPCER_NO_SUCH_DOMAIN

    ドメイン修飾をしたサービスグループ名の,ドメイン名が間違っています。

    DCRPCER_NO_SUCH_SERVICE

    serviceNameパラメタに設定したサービス名は,定義されていません。

    DCRPCER_NO_SUCH_SERVICE_GROUP

    serviceGroupNameパラメタに設定したサービスグループは定義されていません。RpcBindTable構造体のNodeIDプロパティに指定されたノード識別子が,グローバルドメイン(システム共通定義のall_nodeオペランドで指定したノード名の集合)内にありません。

    一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため,トランザクションブランチを開始できません。

    トランザクション内でドメイン修飾をしたサービス要求で,flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定していません。

    リソースマネジャ(RM)でエラーが発生したため,トランザクションブランチを開始できません。

    SetDirectScheduleメソッドを使用してRpcBindTable構造体を作成し,非トランザクション属性(ユーザサービス定義のatomic_updateオペランドにNを指定)のユーザサーバに対し,CallToメソッドのflagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANとの論理和を指定しないでサービスを要求しました。

    DCRPCER_OLTF_INITIALIZING

    サービスを要求されたノードにあるOpenTP1は,開始処理中です。

    DCRPCER_OLTF_NOT_UP

    serviceNameパラメタに設定したサービスがあるノードのOpenTP1が稼働していません。異常終了,停止中,終了処理中,または通信障害の発生が考えられます。

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

    DCRPCER_REPLY_TOO_BIG

    返ってきた応答が,クライアントUAPで用意した領域に入り切りません。

    DCRPCER_REPLY_TOO_BIG_RB

    返ってきた応答が,クライアントUAPで用意した領域に入り切りません。このエラーコードが返った場合は,トランザクションブランチをコミットできません。

    DCRPCER_SECCHK

    サービスを要求されたSPP.NETまたはSPPは,OpenTP1のセキュリティ機能で保護されています。Callメソッドでサービスを要求したUAPには,SPP.NETまたはSPPへのアクセス権限がありません。

    DCRPCER_SERVER_BUSY

    サービスを要求されたソケット受信型サーバが,サービス要求を受け取れません。

    DCRPCER_SERVICE_CLOSED

    serviceNameパラメタに設定したサービス名のサービスがあるサービスグループは,閉塞しています。

    DCRPCER_SERVICE_NOT_UP

    serviceNameパラメタに設定したサービスのUAPプロセスが,稼働していません。

    サービス要求の応答待ち時間に0を指定した場合に,サービスを要求されたSPP.NETまたはSPPが,処理を完了する前に異常終了しました。

    DCRPCER_SERVICE_TERMINATING

    serviceNameパラメタに設定したサービスは,終了処理中です。

    DCRPCER_SYSERR

    システムエラーが発生しました。

    DCRPCER_SYSERR_AT_SERVER

    設定したサービスで,システムエラーが発生しました。

    DCRPCER_SYSERR_AT_SERVER_RB

    設定したサービスで,システムエラーが発生しました。このエラーコードが返った場合は,トランザクションブランチをコミットできません。

    DCRPCER_SYSERR_RB

    システムエラーが発生しました。このエラーコードが返った場合は,トランザクションブランチをコミットできません。

    DCRPCER_TESTMODE

    オンラインテスタを使っている環境で,テストモードのUAPからテストモードでないSPPへサービスを要求しています。または,テストモードでないUAPからテストモードのSPPへサービスを要求しています。

    DCRPCER_TIMED_OUT

    Callメソッドの処理が時間切れ(タイムアウト)になりました。

    サービスを要求されたSPP.NETまたはSPPが,処理を完了する前に異常終了しました。

    DCRPCER_TRNCHK

    ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境で,複数のSPP.NETまたはSPPのトランザクション属性が一致していません。または,負荷を分散する先のノードにあるOpenTP1のバージョンが,クライアントのOpenTP1のバージョンよりも古いため,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を実行できません。

    このエラーコードは,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を使っているSPP.NETまたはSPPにサービスを要求した場合だけ返されます。

    DCRPCER_TRNCHK_EXTEND

    同時に起動できるトランザクションブランチの数を超えたため,トランザクションブランチを開始できません。

    一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため,トランザクションブランチを開始できません。

    トランザクション内でドメイン修飾をしたサービス要求で,flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定していません。

    リソースマネジャ(RM)でエラーが発生したため,トランザクションブランチを開始できません。

    SetDirectScheduleメソッドを使用してRpcBindTable構造体を作成し,非トランザクション属性(ユーザサービス定義のatomic_updateオペランドにNを指定)のユーザサーバに対し,CallToメソッドのflagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANとの論理和を指定しないでサービスを要求しました。

注意事項
  • 一つのマシン内に複数のLANアダプタが接続されているマルチホームドホスト環境で,システム共通定義のmy_hostオペランドに指定したホスト名と異なる自マシン内のほかのホスト名を,RpcBindTable構造体のHostNameプロパティ,SetBindTableメソッドのhostNameパラメタ,またはSetDirectScheduleメソッドのhostNameパラメタに指定してはいけません。指定した場合は,動作の保証はしません。

  • ホスト名とノード識別子を同時にRpcBindTable構造体に指定した場合,ホスト名の指定が有効になり,ノード識別子の指定は無視します。

  • RpcBindTable構造体に,ホスト名,ノード識別子ともに空文字またはnull(Visual Basicの場合はNothing)を指定した場合は,Callメソッドとまったく同じ動作をします。

  • スケジュールサービスの管理するユーザサーバに直接サービスを要求する場合は,必ずSetDirectScheduleメソッドを使用してRpcBindTable構造体を作成してください。

  • SetDirectScheduleメソッドを使用してRpcBindTable構造体を作成し,ソケット受信型(ユーザサービス定義のreceive_fromオペランドにsocketを指定)ユーザサーバへサービスを要求した場合は,CallToメソッドは,Hitachi.OpenTP1.Server.DCRPCER_SERVICE_NOT_UPで例外応答します。

  • SetDirectScheduleメソッドで作成したRpcBindTable構造体を指定してCallToメソッドを呼び出すときに,非トランザクション属性(ユーザサービス定義のatomic_updateオペランドにNを指定)のユーザサーバへサービスを要求する場合,flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANとの論理和を指定しなければなりません。指定しなかった場合,CallToメソッドはTP1ServerFlags.DCRPCER_TRNCHK_EXTENDで例外応答します。

  • SetDirectScheduleメソッドで作成したRpcBindTable構造体を指定してCallToメソッドを呼び出す場合,サービス要求先のOpenTP1のバージョンは03-02以降でなければなりません。03-02より前の場合,動作の保証はしません。

  • ドメイン修飾をしたRPCはできません。CallToメソッドのflagsパラメタにTP1ServerFlags.DCRPC_DOMAINを指定した場合は,Hitachi.OpenTP1.Server.DCRPCER_INVALID_ARGSで例外応答します。

  • 次の場合,CallToメソッドがHitachi.OpenTP1.Server.DCRPCER_TIMED_OUTで例外応答することがあります。

    システム共通定義のall_nodeオペランドで指定していないノードのサービスグループに対して,ホスト名を検索のキーに使用してCallToメソッドを呼び出したあとに,このノード上のOpenTP1を停止または再開始し,同じサービスグループに対して再度ホスト名を検索のキーに使用してCallToメソッドを呼び出した場合。

  • SetDirectScheduleメソッドを使用して作成したRpcBindTable構造体をCallToメソッドのdirectionパラメタに指定して,CallToメソッドを呼び出した場合,システム共通定義のrpc_retryオペランドは無効になります。

    SetDirectScheduleメソッドを使用して作成したRpcBindTable構造体をCallToメソッドのdirectionパラメタに指定して,CallToメソッドを呼び出した場合,性能検証用トレースは取得できますが,呼び出し先のUAPの性能検証用トレース情報とはリンクしていません。クライアントUAPで取得した性能検証用トレースの通番は,サーバUAPに引き継ぎません。

Close

説明

OpenTP1の各種メソッドを使うための環境をクローズします。

SUP.NETでだけ使用します。SPP.NETではOpenメソッドおよびCloseメソッドを呼び出さないでください。

Closeメソッドを呼び出したあとは,OpenTP1のメソッドは使えません。

Closeメソッドはプロセスで1回だけ呼び出してください。

Closeメソッドは,OpenTP1にSUP.NETが正常に終了したことを知らせる働きをします。

Closeメソッドを呼び出さないでSUP.NETを終了すると,異常終了とみなされてサービスグループの閉塞やプロセス再起動の対象になることがあります。また,OpenTP1で管理する各種資源が解放されないままになって,そのあとの処理に悪影響を与える場合があります。OpenTP1で使うすべてのSUP.NETでは,Openメソッドを呼び出したら,Closeメソッドを必ず呼び出してください。

Closeメソッドは,Openメソッドが例外応答したときにも必ず呼び出してください。

Closeメソッドを呼び出したあとは,同じSUP.NETで再びOpenメソッドを呼び出せません。

宣言
【C#の場合】
public static void Close(
);
【Visual Basicの場合】
Public Shared Sub Close( _
)
【J#の場合】
public static void Close(
);
パラメタ

なし

戻り値

なし

例外

なし

DiscardFurtherReplies

説明

非同期応答型RPC(CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_DOMAINを設定)で,まだ返ってきていない応答を,これ以上受信しないことを示すメソッドです。このメソッドを呼び出したあとは,応答が返ってきても受信しないで捨てます。

非同期応答型RPCの結果をこれ以上受信しない場合は,必ずDiscardFurtherRepliesメソッドを呼び出してください。呼び出さないと,PollAnyRepliesメソッドが不要な応答を受信してしまうことがあります。

DiscardFurtherRepliesメソッドを使う場合を次に示します。

  • 応答待ち時間切れになったあと,結果を保持しておくバッファを解放する場合

  • 非同期応答型RPCを複数回使って,そのうち最初の応答だけ必要な場合

宣言
【C#の場合】
public static void DiscardFurtherReplies(
);
【Visual Basicの場合】
Public Shared Sub DiscardFurtherReplies( _
)
【J#の場合】
public static void DiscardFurtherReplies(
);
パラメタ

なし

戻り値

なし

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

DiscardSpecificReply

説明

非同期応答型RPC(CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_NOWAITを設定)で,まだ返ってきていない応答を,これ以上受信しないことを示すメソッドです。受信を拒否する非同期応答を特定するには,descriptorパラメタに,非同期応答型RPCが応答で返した記述子を設定します。このメソッドを呼び出したあとに返ってきた応答の中で,設定した記述子と同じ記述子を持つ応答は受信しないで捨てます。

宣言
【C#の場合】
public static void DiscardSpecificReply(
  int descriptor
);
【Visual Basicの場合】
Public Shared Sub DiscardSpecificReply( _
  ByVal descriptor As Integer _
)
【J#の場合】
public static void DiscardSpecificReply(
  int descriptor
);
パラメタ
descriptor

非同期応答型RPCのCallメソッドが正常に終了したときに返された記述子を設定します。

戻り値

なし

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

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

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_INVALID_ARGS

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

    DCRPCER_INVALID_DES

    descriptorパラメタに設定した記述子は存在しません。要因として次のことが考えられます。

    • 設定した記述子に対応する非同期応答型RPCを行っていない。

    • 非同期応答型RPCの応答がすでに受信されている,または受信が拒否されている。

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

GetCallersAddress

説明

クライアントUAPのプロセスが稼働するノードアドレスを,サーバUAPで取得します。GetCallersAddressメソッドで返されたアドレス値で,クライアントUAPのセキュリティチェックができます。

GetCallersAddressメソッドで返されたアドレスを使って,サービスの応答やエラーの応答などは送信できません。

GetCallersAddressメソッドは,サービスメソッドから呼び出してください。

サービスメソッド以外から呼び出した場合の処理は保証しません。

宣言
【C#の場合】
public static System.Net.IPAddress GetCallersAddress(
);
【Visual Basicの場合】
Public Shared Function GetCallersAddress( _
) As System.Net.IPAddress
【J#の場合】
public static System.Net.IPAddress GetCallersAddress(
);
パラメタ

なし

戻り値

メソッドが正常終了の場合に,クライアントUAPのノードアドレスを格納します。

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

注意事項

次の条件が重なった場合,クライアントUAPのノードアドレスは,実際にクライアントUAPが通信で使用したノードアドレスと異なる場合があります。

  • リモートAPI機能を使用して,サービス要求を受け付けた。

  • クライアントUAPが存在するホストがマルチホームドホスト環境である。

GetErrorDescriptor

説明

非同期応答を特定しないPollAnyRepliesメソッドで例外が発生した直後に呼び出すことで,エラーが発生した非同期応答型RPC要求に対応する記述子を取得します。

記述子を取得できるのは,SPP.NETまたはSPP側でエラーが発生した場合だけです。PollAnyRepliesメソッドの呼び出し側でエラーが発生した場合には,このメソッドの記述子を取得できません。

宣言
【C#の場合】
public static int GetErrorDescriptor(
);
【Visual Basicの場合】
Public Shared Function GetErrorDescriptor( _
) As Integer
【J#の場合】
public static int GetErrorDescriptor(
);
パラメタ

なし

戻り値
  • 正の整数

    PollAnyRepliesメソッドが返したエラーに対応する非同期応答型RPC要求の記述子を返します。

  • 0

    PollAnyRepliesメソッドが返したエラーに対応する非同期応答型RPC要求の記述子を取得できませんでした。

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

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

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_INVALID_ARGS

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

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

GetGatewayAddress

説明

アプリケーションゲートウェイ型ファイアウォールなどの,ゲートウェイを介してクライアントUAPからのサービス要求を受信したとき,サーバUAPでゲートウェイのノードアドレスを取得します。

リモートAPI機能を使用してサービスを要求した場合,サーバUAPで,ゲートウェイのノードアドレスを取得できます。

GetGatewayAddressメソッドで返されたアドレスを使って,サービスの応答やエラーの応答などの送信はできません。

GetGatewayAddressメソッドは,サービスメソッドから呼び出してください。

サービスメソッド以外から呼び出した場合の処理は保証できません。

宣言
【C#の場合】
public static System.Net.IPAddress GetGatewayAddress(
);
【Visual Basicの場合】
Public Shared Function GetGatewayAddress( _
) As System.Net.IPAddress
【J#の場合】
public static System.Net.IPAddress GetGatewayAddress(
);
パラメタ

なし

戻り値

メソッドが正常終了の場合に,ゲートウェイのノードアドレスを格納します。

リモートAPI機能を使用していない場合には0.0.0.0が設定されます。

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

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

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_INVALID_ARGS

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

    DCRPCER_PROTO

    サービスメソッドから呼び出されていません。

    Openメソッドを呼び出していません。

GetServicePriolity

説明

SetServicePriolityメソッドで設定した,サービス要求のスケジュールプライオリティを参照します。このメソッドが返すスケジュールプライオリティの値は,UAPが再びSetServicePriolityメソッドを呼び出すまで変わりません。

次に示す場合,GetServicePriolityメソッドは省略時仮定値(4)を返します。

  • UAPでSetServicePriolityメソッドを呼び出していない場合

  • SetServicePriolityメソッドのschedulePriolityパラメタに0を設定して呼び出した場合

宣言
【C#の場合】
public static int GetServicePriolity(
);
【Visual Basicの場合】
Public Shared Function GetServicePriolity( _
) As Integer
【J#の場合】
public static int GetServicePriolity(
);
パラメタ

なし

戻り値

SetServicePriolityメソッドで設定したスケジュールプライオリティを,1〜8の範囲で示します。

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

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

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

    上記以外の負の整数

    プログラムの破壊などによる,予期しないエラーが発生しました。

GetTimeout

説明

現在のサービス要求の応答待ち時間を参照します。このメソッドは,SetTimeoutメソッドで応答待ち時間を一時的に変更する前に,元の値を退避するために使います。

このメソッドは,SetTimeoutメソッドで変更したサービス応答待ち時間を返します。変更していない場合は,次に示す値を返します。

  • TP1/Server Baseの場合:システム共通定義のwatch_timeオペランドの値

  • TP1/LiNKの場合:180秒

このメソッドで得られる値は,OpenTP1のCallメソッドに対して有効です。

宣言
【C#の場合】
public static int GetTimeout(
);
【Visual Basicの場合】
Public Shared Function GetTimeout( _
) As Integer
【J#の場合】
public static int GetTimeout(
);
パラメタ

なし

戻り値

現在のサービス応答待ち時間を示します。

0の場合は,無制限に待ち続ける指定です。

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

    ます。

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

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

  • クラス名

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

  • メソッド名

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

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

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

    上記以外の負の整数

    プログラムの破壊などによる,予期しないエラーが発生しました。

Open

説明

OpenTP1の各種メソッドを使う準備をします。

SUP.NETでだけ使用します。SPP.NETではOpenメソッドおよびCloseメソッドを呼び出さないでください。

Openメソッドはプロセスで1回だけ呼び出してください。

メインメソッドでの初期化手順を次に示します。

  1. プロセス間通信のためのエントリポイントを開きます。

  2. OpenTP1で使う共用メモリを取得します。

  3. OpenTP1にSUP.NETの開始を通知して,プロセスの監視を要求します。

  4. そのほか,設定したSUP.NETの環境に従って,使うOpenTP1の各機能の初期化処理をします。

SUP.NETにトランザクション属性を指定している場合は,そのノードでOpenTP1のトランザクションサービスとプロセスサービスが実行中であることが前提になります。Openメソッドは,OpenTP1がOSの開始に伴って,またはdcstartコマンドによって正常開始したあとでないと実行できません。OpenTP1が正常開始する前にOpenメソッドを呼び出すと,Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_NOT_UPで例外応答します。この場合は,CallメソッドなどのOpenTP1のメソッドは使えません。

UAPトレースは,Openメソッドが正常に終了したあとに呼び出したすべてのOpenTP1のメソッドについて取得されます。そのため,Openメソッドが例外応答した場合のUAPトレースは,取得されている場合も取得されていない場合もあります。

宣言
【C#の場合】
public static void Open(
);
【Visual Basicの場合】
Public Shared Sub Open( _
)
【J#の場合】
public static void Open(
);
パラメタ

なし

戻り値

なし

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

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

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

  • エラーコード

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

    エラーコード

    説明

    DCNJSER_SYSTEM

    内部エラーが発生しました。

    DCNJSER_XALIB_INVALID

    トランザクション制御用ライブラリが不正です。

    DCNJSER_XALIB_LOAD

    トランザクション制御用ライブラリが見つかりません。

    DCRPCER_FATAL

    初期化に失敗しました。以降,OpenTP1のメソッドは使えません。

    DCRPCER_INVALID_ARGS

    引数が間違っています。

    DCRPCER_OLTF_NOT_UP

    SUP.NETがあるノードのOpenTP1が実行していません。

    DCRPCER_PROTO

    Openメソッドはすでに呼び出しています。

    DCRPCER_SEC_INIT

    セキュリティ機能を使ったOpenTP1が,セキュリティ環境の初期化処理でエラーになりました。

    DCRPCER_STANDBY_END

    待機系のユーザサーバが,待機の終了を要求されました。または,系切り替え時にすでに終了していたため,待機の終了を要求されました。

PollAnyReplies

説明

非同期応答型RPC(CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_NOWAITを設定)でサービス要求した結果を受信します。

受信する非同期応答を特定する場合は,flagsパラメタにTP1ServerFlags.DCRPC_SPECIFIC_MSGを設定します。このフラグを設定した場合は,descriptorパラメタに設定した記述子を設定した非同期応答型RPCの応答を受信します。

受信する非同期応答を特定しない場合は,flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定します。このとき,descriptorパラメタに設定した値は無視されます。flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定したPollAnyRepliesメソッドが正常に終了すると,受信した非同期応答の記述子と同じ値を返します。

PollAnyRepliesメソッドは,次のどちらかの場合に例外応答します。

  • 非同期応答型RPCの応答を受信したとき

  • メソッドのパラメタに指定した応答待ち時間切れになったとき

PollAnyRepliesメソッドが正常に終了すると,非同期応答型RPCを使ったCallメソッドに設定した応答を格納する領域に,受信した応答が設定されます。

PollAnyRepliesメソッドの詳しい説明については,このメソッドの「注意事項」を参照してください。「注意事項」では次に示す項目について説明しています。

(1)PollAnyRepliesメソッドのtimeoutパラメタについて

(2)PollAnyRepliesメソッドがエラーになるタイミング

(3)エラーコードHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDを返させる指定

(4)エラーコードと同期点処理の関係

(5)PollAnyRepliesメソッドで応答が受け取れない場合

(6)PollAnyRepliesメソッドを使うときの注意

宣言
【C#の場合】
public static int PollAnyReplies(
  int descriptor,
  int timeout,
  int flags
);
【Visual Basicの場合】
Public Shared Function PollAnyReplies( _
  ByVal descriptor As Integer, _
  ByVal timeout As Integer, _
  ByVal flags As Integer _
) As Integer
【J#の場合】
public static int PollAnyReplies(
  int descriptor,
  int timeout,
  int flags
);
パラメタ
descriptor

非同期応答型RPCのCallメソッド(flagsパラメタにTP1ServerFlags.DCRPC_NOWAIT)が正常に終了したときに返された,記述子を設定します。

flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定した場合は,ここに設定した値は無視されます。

timeout

非同期応答型RPCのCallメソッドの結果が返ってくるまでの待ち時間を,秒単位またはミリ秒単位で設定します。指定できる値の範囲は,-1から2147483647までです。

PollAnyRepliesメソッドで非同期応答を受信する場合は,UAPに設定した応答待ち時間を参照しません。

0を設定した場合,flagsパラメタにTP1ServerFlags.DCNOFLAGSまたはTP1ServerFlags.DCRPC_SPECIFIC_MSGを設定したとき,応答が返っていないとHitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTで,すぐに例外応答します。flagsパラメタにTP1ServerFlags.DCRPC_WAIT_MILLISECを設定したときは50ミリ秒として処理します。

-1を設定した場合は,応答が返るまで待ち続けます。

flags

RPCの形態とオプションを,次に示す形式で設定します。

{TP1ServerFlags.DCNOFLAGS|
TP1ServerFlags.DCRPC_SPECIFIC_MSG}
〔|TP1ServerFlags.DCRPC_WAIT_MILLISEC〕

オプション

説明

TP1ServerFlags.DCNOFLAGS

受信する非同期の応答を特定しません。

TP1ServerFlags.DCRPC_SPECIFIC_MSG

descriptorパラメタに設定した記述子をリターンした,非同期応答型RPCの応答を受信します。

TP1ServerFlags.DCRPC_WAIT_MILLISEC

timeoutパラメタで設定した待ち時間の単位をミリ秒にします。

戻り値

受信した非同期応答の記述子を示します。正の整数は,flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定したメソッドが正常に終了した場合に返されます。

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

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

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_ALL_RECEIVED

    非同期応答型RPCで要求したサービスの処理結果は,すべて受信しました。

    DCRPCER_INVALID_ARGS

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

    DCRPCER_INVALID_DES

    descriptorパラメタに設定した記述子は存在しません。このエラーコードは,flagsパラメタにTP1ServerFlags.DCRPC_SPECIFIC_MSGを設定した場合に返されます。

    DCRPCER_INVALID_REPLY

    サービスメソッドがOpenTP1に返した応答の長さが,1から1048576の範囲にありません。

    DCRPCER_MESSAGE_TOO_BIG

    inputBuffer_lenパラメタに設定した入力パラメタ長が,最大値を超えています。

    DCRPCER_NET_DOWN

    ネットワークに障害が起こりました。

    DCRPCER_NO_BUFS

    メモリが不足しました。

    DCRPCER_NO_BUFS_AT_SERVER

    Callメソッドに設定したサービスで,メモリが不足しました。

    DCRPCER_NO_BUFS_RB

    メモリが不足しました。このエラーコードが返った場合は,トランザクションブランチをコミットできません。

    DCRPCER_NO_PORT

    ドメイン修飾をしてサービスを要求しましたが,ドメイン代表スケジュールサービスのポート番号が見つかりません。

    DCRPCER_NO_SUCH_DOMAIN

    ドメイン修飾をしたサービスグループ名の,ドメイン名が間違っています。

    DCRPCER_NO_SUCH_SERVICE

    CallメソッドのserviceNameパラメタに設定したサービス名は,定義されていません。

    DCRPCER_NO_SUCH_SERVICE_GROUP

    CallメソッドのserviceGroupNameパラメタに設定したサービスグループは,定義されていません。

    DCRPCER_OLTF_INITIALIZING

    サービスを要求されたノードにあるOpenTP1は,開始処理中です。

    DCRPCER_OLTF_NOT_UP

    CallメソッドのserviceNameパラメタに設定したサービスがあるノードのOpenTP1が稼働していません。異常終了,停止中,終了処理中,または通信障害が起こったことが考えられます。

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

    DCRPCER_REPLY_TOO_BIG

    返ってきた応答が,クライアントUAPで用意した領域に入り切りません。

    DCRPCER_REPLY_TOO_BIG_RB

    返ってきた応答が,クライアントUAPで用意した領域に入り切りません。このエラーコードが返った場合は,トランザクションブランチをコミットできません。

    DCRPCER_SECCHK

    サービスを要求されたSPP.NETまたはSPPは,OpenTP1のセキュリティ機能で保護されています。Callメソッドでサービスを要求したUAPには,SPP.NETまたはSPPへのアクセス権限がありません。

    DCRPCER_SERVER_BUSY

    サービスを要求されたソケット受信型サーバが,サービス要求を受け取れません。

    DCRPCER_SERVICE_CLOSED

    CallメソッドのserviceNameパラメタに設定したサービス名があるサービスグループは,閉塞しています。

    DCRPCER_SERVICE_NOT_UP

    CallメソッドのserviceNameパラメタに設定したサービスのUAPプロセスが,稼働していません。

    timeoutパラメタに-1を指定した場合に,サービスを要求されたSPP.NETまたはSPPが,処理を完了する前に異常終了しました。

    DCRPCER_SERVICE_TERMINATED

    サービスを要求されたSPP.NETまたはSPPが,処理を完了する前に異常終了しました。このエラーコードは,ユーザサービス定義のrpc_extend_functionオペランドに"00000001"を指定したクライアントUAPの場合にだけ返されます。

    rpc_extend_functionオペランドに"00000000"を指定,またはオペランドを省略した場合は,このエラーコードは返らないで,Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTまたはHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UPが返されます。

    DCRPCER_SERVICE_TERMINATING

    CallメソッドのserviceNameパラメタに設定したサービスは,終了処理中です。

    DCRPCER_SYSERR

    システムエラーが発生しました。

    DCRPCER_SYSERR_AT_SERVER

    Callメソッドに設定したサービスで,システムエラーが発生しました。

    DCRPCER_SYSERR_AT_SERVER_RB

    設定したサービスで,システムエラーが発生しました。このエラーコードが返った場合は,トランザクションブランチをコミットできません。

    DCRPCER_SYSERR_RB

    システムエラーが発生しました。このエラーコードが返った場合は,トランザクションブランチをコミットできません。

    DCRPCER_TESTMODE

    オンラインテスタを使っている環境で,テストモードのUAPからテストモードでないSPPへサービスを要求しています。または,テストモードでないUAPからテストモードのSPPへサービスを要求しています。

    DCRPCER_TIMED_OUT

    Callメソッドの処理が時間切れ(タイムアウト)になりました。

    サービスを要求されたSPP.NETまたはSPPが,処理を完了する前に異常終了しました。

    DCRPCER_TRNCHK

    ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境で,複数のSPP.NETまたはSPPのトランザクション属性が一致していません。または,負荷を分散する先のノードにあるOpenTP1のバージョンが,クライアントのOpenTP1のバージョンよりも古いため,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を実行できません。

    このエラーコードは,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を使っているSPP.NETまたはSPPにサービスを要求した場合にだけ返されます。

    DCRPCER_TRNCHK_EXTEND

    同時に起動できるトランザクションブランチの数を超えたため,トランザクションブランチを開始できません。

    一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため,トランザクションブランチを開始できません。トランザクション内でドメイン修飾をしたサービス要求で,flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定していません。

    リソースマネジャ(RM)でエラーが発生したため,トランザクションブランチを開始できません。

注意事項
(1)PollAnyRepliesメソッドのtimeoutパラメタについて

非同期受信の監視時間は,応答が返るたびにリセットされます。

そのため,受信する非同期応答を特定(flagsパラメタにTP1ServerFlags.DCRPC_SPECIFIC_MSGを設定)した場合は,timeoutパラメタに設定した時間を経過しても,応答を受信できることがあります。また,timeoutパラメタに設定した時間を経過しても,Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTで例外応答しない場合もあります。

(2)PollAnyRepliesメソッドがエラーになるタイミング

サービスを要求されたSPP.NETまたはSPPが異常終了した場合,クライアントUAPでエラーが返るタイミングについて説明します。

サービスを実行するSPP.NETまたはSPPが,処理が終わる前に異常終了すると,PollAnyRepliesメソッドはHitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTで例外応答します。PollAnyRepliesメソッドのtimeoutパラメタに-1を設定している場合は,Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UPで例外応答します。

PollAnyRepliesメソッドの時間監視でエラーになる場合

次に示す場合には,PollAnyRepliesメソッドのtimeoutパラメタに設定した時間が経過したあとで,Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTで例外応答します。

  • SPP.NETまたはSPPがあるノードのOpenTP1全体が異常終了した場合

  • サービス要求のデータをサーバUAPが受信する前,またはサーバUAPの処理が完了してからクライアントUAPが結果を受信する前に障害が起こった場合

(3)エラーコードHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDを返させる指定

サービスを要求されたSPP.NETまたはSPPが,処理を完了する前に異常終了したことをHitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTまたはHitachi.OpenTP1.Server.DCRPCER_SERVICE_NOT_UP以外のエラーコードで判別したい場合には,ユーザサービス定義のrpc_extend_functionオペランドに"00000001"を指定します。この指定をすると,上記のエラー時にHitachi.OpenTP1.Server.DCRPCER_SERVICE_TERMINATEDが返されるようになります。rpc_extend_functionオペランドに"00000000"を指定するか,またはオペランドを省略した場合は,Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDは返らないで,Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTまたはHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UPが返されます。

(4)エラーコードと同期点処理の関係

PollAnyRepliesメソッドのエラーコードと同期点処理(コミット,ロールバック)の関係について説明します。ここで説明する内容は,サービス要求がトランザクション処理になる場合に該当します。

トランザクションでないサービス要求(CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定した場合も含む)には該当しません。

PollAnyRepliesメソッドが例外応答してもコミットとなる場合

サービスを要求されたサービスメソッドの異常終了,ノードの障害,ネットワーク障害などの場合でも,Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTが返ることがあります。クライアントUAPがトランザクション処理でない場合は,Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTが返っても,要求したサービスがあるサービスメソッドは正常終了していて,データベースへの更新などが実行されているときもあります。

ロールバック処理が必要な例外応答値

トランザクション処理から呼び出したPollAnyRepliesメソッドが例外応答した場合,エラーコードによっては,必ずトランザクションがロールバック(サーバUAPがrollback_only状態)になります。この場合,コミットのメソッド,またはロールバックのメソッドのどちらを使っても,必ずロールバックになります。必ずロールバックになるPollAnyRepliesメソッドのエラーコードを次に示します。

  • Hitachi.OpenTP1.TP1Error.DCRPCER_INVALID_REPLY

  • Hitachi.OpenTP1.TP1Error.DCRPCER_NO_BUFS_AT_SERVER

  • Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE

  • Hitachi.OpenTP1.TP1Error.DCRPCER_REPLY_TOO_BIG_RB

(5)PollAnyRepliesメソッドで応答が受け取れない場合

非同期応答型RPCでサービスを要求したUAPが次に示すメソッドを呼び出すと,PollAnyRepliesメソッドで応答を受け取れません。

  • DiscardFurtherRepliesメソッドで,非同期応答の受信を拒否した場合

  • トランザクションの処理の場合,同期点処理のメソッドでコミットまたはロールバックした場合

上記のメソッドを使ったあとで返ってきた応答は,破棄されます。

非同期応答型RPCでは,上記のメソッドを呼び出す前に,必要な非同期の応答をPollAnyRepliesメソッドですべて受け取ってください。

(6)PollAnyRepliesメソッドを使うときの注意
  • PollAnyRepliesメソッドを待ち時間0と設定(timeoutパラメタに0を設定)して呼び出すと,マルチスレッド環境のスケジューリングに関連して,応答が到着していても受信できない場合があります。そのため,すべての応答を受信するまで,待ち時間に0を設定したPollAnyRepliesメソッドを呼び出すUAPは,無限ループになることがあるので注意してください。

  • 記述子を特定しないPollAnyRepliesメソッドが例外応答した場合,エラーとなった応答の記述子を特定できません。PollAnyRepliesメソッドが例外応答したときに該当する記述子がわかるようにしておきたい場合は,flagsパラメタにTP1ServerFlags.DCRPC_SPECIFIC_MSGを設定しておいてください。

SetBindTable

説明

指定されたサービス要求先ノードのノード識別子(nodeIDパラメタの値),または指定されたサービス要求先ノードのホスト名(hostNameパラメタの値)をRpcBindTable構造体に設定し,CallToメソッドの第一引数を作成します。

宣言
【C#の場合】
public static void SetBindTable(
  ref Hitachi.OpenTP1.Server.RpcBindTable direction,
  string nodeID,
  string hostName,
  int portNo
);
【Visual Basicの場合】
Public Shared Sub SetBindTable( _
  ByRef direction As Hitachi.OpenTP1.Server.RpcBindTable, _
  ByVal nodeID As String, _
  ByVal hostName As String, _
  ByVal portNo As Integer _
)
【J#の場合】
public static void SetBindTable(
  Hitachi.OpenTP1.Server.RpcBindTable direction,
  System.String nodeID,
  System.String hostName,
  int portNo
);
パラメタ
direction

RpcBindTable構造体を設定します。

nodeID

ノード識別子を設定します。

ノード識別子を検索のキーにしない場合には,空文字列またはnull(Visual Basicの場合はNothing)を指定してください。

ノード識別子は,システム共通定義のnode_idオペランドに指定した名称で,かつサービス要求先ノードのホスト名がグローバルドメイン(システム共通定義のall_nodeオペランドで指定したノード名の集合)内にあることが前提です。

hostName

ホスト名を設定します。

ホスト名を,サービス要求先を特定する検索のキーにしない場合には,空文字列またはnull(Visual Basicの場合はNothing)を指定してください。

サービス要求先ノードのホスト名はグローバルドメイン(システム共通定義のall_nodeオペランドに指定したノード名の集合)に指定されていても,指定されていなくてもどちらでもかまいません。

portNo
  • ホスト名を検索のキーにする場合

    サービス要求先のOpenTP1システムのネームサービスのポート番号(システム共通定義のname_portオペランドに指定した値)を指定します。

    サービス要求先のネームサービスのポート番号が,サービス要求元のネームサービスのポート番号と同じ場合は,0を指定します。

  • ノード識別子を検索のキーとする場合

    portNoパラメタに0を指定します。portNoパラメタに0を指定した場合は,サービス要求先のネームサービスのポート番号(システム共通定義のname_portオペランドに指定した値)と,サービス要求元のネームサービスのポート番号を同じにしてください。

戻り値

なし

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

注意事項
  • SetBindTableメソッドは,CallToメソッドの第一引数に指定する,RpcBindTable構造体を設定するためのメソッドです。

  • SetBindTableメソッドの引数の指定値のチェックや,指定方法によってどのような動作をするかについては,作成したRpcBindTable構造体を指定して呼び出したCallToメソッドの動作が示します。

  • SetBindTableメソッドは,UAPトレースを取得しません。

SetDirectSchedule

説明

指定されたサービス要求先ノードのホスト名(hostNameパラメタの値)と,指定されたスケジュールサービスのポート番号(schedulePortNoパラメタの値)をRpcBindTable構造体に設定し,CallToメソッドの第一引数を作成します。

宣言
【C#の場合】
public static void SetDirectSchedule(
  ref Hitachi.OpenTP1.Server.RpcBindTable direction,
  string hostName,
  int schedulePortNo
);
【Visual Basicの場合】
Public Shared Sub SetDirectSchedule( _
  ByRef direction As Hitachi.OpenTP1.Server.RpcBindTable, _
  ByVal hostName As String, _
  ByVal schedulePortNo As Integer _
)
【J#の場合】
public static void SetDirectSchedule(
  Hitachi.OpenTP1.Server.RpcBindTable direction,
  System.String hostName,
  int schedulePortNo
);
パラメタ
direction

RpcBindTable構造体を設定します。

hostName

サービス要求先ノードのホスト名を指定します。

サービス要求先ノードのホスト名はグローバルドメイン(システム共通定義のall_nodeオペランドに指定したノード名の集合)に指定されていても,指定されていなくても,どちらでもかまいません。

ホスト名は必ず指定してください。ホスト名に空文字列またはnull(Visual Basicの場合はNothing)が指定された場合は,CallToメソッドで例外が発生します。

schedulePortNo

サービス要求先OpenTP1システムのスケジュールサービスのポート番号(サービス要求先のスケジュールサービス定義のscd_portオペランドに指定した値)を指定します。0を指定した場合は,送信先ポート番号の省略値として,サービス要求元のスケジュールサービス定義のscd_portオペランドの指定値を仮定します。

戻り値

なし

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

注意事項
  • SetDirectScheduleメソッドは,CallToメソッドの第一引数に指定するRpcBindTable構造体を設定するためのメソッドです。

  • SetDirectScheduleメソッドの引数の指定値のチェックや,指定方法によってどのような動作をするかについては,作成したRpcBindTable構造体を指定して呼び出したCallToメソッドの動作が示します。

  • SetDirectScheduleメソッドは,UAPトレースを取得しません。

SetServicePriolity

説明

サービス要求のプライオリティを設定します。サービス要求単位でスケジュールプライオリティを制御する場合に呼び出します。

このメソッドで設定したプライオリティは,このメソッドを再び呼び出すまで更新されません。したがって,同じプライオリティでまとめてサービス要求する場合は,このメソッドを1回だけ呼び出します。

このメソッドで指定したプライオリティは,直後に呼び出すCallメソッドで,スケジュールキューを経由してサーバに通知されます。

このメソッドを一度も呼び出さない場合の処理は,スケジュールサービスの省略時解釈で,サービス要求のプライオリティが決定されます。

宣言
【C#の場合】
public static void SetServicePriolity(
  int schedulePriolity
);
【Visual Basicの場合】
Public Shared Sub SetServicePriolity( _
  ByVal schedulePriolity As Integer _
)
【J#の場合】
public static void SetServicePriolity(
  int schedulePriolity
);
パラメタ
schedulePriolity

サービス要求のスケジュールプライオリティを,0から8の範囲で設定します。schedulePriolityパラメタの設定は省略できません。

最も高いプライオリティの値は1で,最も低いプライオリティの値は8です。

0を設定した場合は,スケジュールサービスの省略時解釈となります。

上記以外の値を設定した場合は,SetServicePriolityメソッドは無視されます。

戻り値

なし

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

注意事項
  • キュー受信型サーバでは,設定したサービス要求のプライオリティは,サーバUAPのユーザサービス定義のservice_priority_controlオペランドにY(プライオリティを制御する)を指定している場合にだけ有効です。

    サービス要求する相手のサーバUAPでプライオリティを制御していない場合は,このメソッドを呼び出しても無効になります。

  • 2回目以降の連鎖RPCでのCallメソッドと,連鎖RPCを終了させるために呼び出す同期応答型RPCのCallメソッド(flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定)のサービス要求に対してSetServicePriolityメソッドを呼び出しても無効となります。

  • Callメソッドは,サービス要求のプライオリティを省略値にリセットしません。サービス要求のプライオリティをリセットする場合は,schedulePriolityに0を設定したSetServicePriolityメソッドを呼び出し直してください。

SetServiceRetry

説明

実行中のサービスメソッドの処理をリトライします。リトライする場合は,サービスメソッドでSetServiceRetryメソッドを呼び出したあとで,リトライするサービスメソッドをリターンしてください。リターンしたあと,同じプロセスで同じサービスメソッドが再起動されます。

応答型RPCで呼ばれたサービスメソッドがリトライされた場合は,リトライ前のサービスメソッドが設定した値(応答を格納する領域および応答の長さ)は無効になります。

ユーザサービス定義のrpc_service_retry_countオペランドに指定した回数を超えた(rpc_service_retry_countオペランドに0を指定した場合も含む)あとでSetServiceRetryメソッドを呼び出した場合,メソッドはHitachi.OpenTP1.TP1Error.DCRPCER_RETRY_COUNT_OVERで例外応答します。このとき,サービスメソッドはリトライされません。

応答型RPCで呼ばれたサービスメソッドの場合は,応答を格納する領域の内容をクライアントUAPに返します。

宣言
【C#の場合】
public static void SetServiceRetry(
);
【Visual Basicの場合】
Public Shared Sub SetServiceRetry( _
)
【J#の場合】
public static void SetServiceRetry(
);
パラメタ

なし

戻り値

なし

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

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

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_PROTO

    SetServiceRetryメソッドを呼び出す条件に誤りがあります。

    次に示すことが考えられます。

    • サービスメソッドの中で呼び出していません。

    • グローバルトランザクションの範囲の中で呼び出しています。

    • Openメソッドを呼び出していません。

    DCRPCER_RETRY_COUNT_OVER

    ユーザサービス定義のrpc_service_retry_countオペランドに指定したサービスリトライ回数最大値を超えて,SetServiceRetryメソッドを呼び出しています。これ以上サービスメソッドをリトライできません。

注意事項
  • SetServiceRetryメソッドを呼び出す場合は,次に示す条件を満たしてください。これらの条件を満たしていない場合,SetServiceRetryメソッドは例外応答します。

    ・サービスメソッドの中でSetServiceRetryメソッドを呼び出していること。

    ・実行中のサービスメソッドが,グローバルトランザクションの範囲でないこと。

  • SetServiceRetryメソッドを呼び出すサービスメソッドでは,クライアントUAPから渡されたデータは参照できますが,変更できません。入力データ領域の内容を変更した場合,システムの動作は保証しません。

  • SetServiceRetryメソッドは,OpenTP1独自のリモートプロシジャコール(Callメソッド)でサービスを要求されたサービスメソッドでだけ呼び出せます。それ以外のサービスメソッドの処理は,SetServiceRetryメソッドでリトライできません。

SetTimeout

説明

サービス要求の応答待ち時間を変更します。このメソッドで変更した値は,Closeメソッドを呼び出すまで有効です。

サービス要求の応答待ち時間をこのメソッドを呼び出す前の値に戻すときは,GetTimeoutメソッドで返された元の値を,このメソッドで再設定してください。

このメソッドは,システム共通定義のwatch_timeオペランドに指定した値を変更しません。このメソッドで設定する値は,直後に呼び出すCallメソッドにだけ影響します。

宣言
【C#の場合】
public static void SetTimeout(
  int waitTime
);
【Visual Basicの場合】
Public Shared Sub SetTimeout( _
  ByVal waitTime As Integer _
)
【J#の場合】
public static void SetTimeout(
  int waitTime
);
パラメタ
waitTime

サービス応答待ち時間を設定します。0〜65535の範囲で設定します。

無制限に待ち続ける場合は,0を設定します。

戻り値

なし

例外
Hitachi.OpenTP1.Server.TP1ServerException

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

  • メッセージ

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

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

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

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

  • クラス名

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

  • メソッド名

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

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

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

  • エラーコード

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

    エラーコード

    説明

    DCRPCER_PROTO

    Openメソッドを呼び出していません。

    上記以外の負の整数

    プログラムの破壊などによる,予期しないエラーが発生しました。