Rich UI 外部からのサービスの同期呼び出し
Rich UI 外部でのサービス呼び出しは常に同期です。つまり、リクエスターがサービスからの応答を待機します。
以下に、サービス・アクセス・ステートメントの構文を示します。
returnValueVariable = serviceName.operationName(argumentList) {timeout = milliseconds};
- returnValueVariable
- 戻り値を受け取る変数の名前。
- serviceName
- インターフェース・パーツまたはサービス・パーツに基づく変数の名前。
- operationName
- インターフェース・パースの関数プロトタイプの名前。
- argumentList
- それぞれが次の値とコンマで区切られた、引数のリスト
引数に関する制約については、『サービス・アクセスのプロトタイプ』を参照してください。
- milliseconds
- EGL ランタイム・コードが Web サービスを呼び出してから、応答を受け取るまでの経過時間の最大有効値 (ミリ秒)。これを超える時間が経過すると、EGL ランタイム・コードは ServiceInvocationException をスローします。ただし、EGL 生成の COBOL コードではこの設定は無効です。タイムアウトを設定するには、次のようにします。
- ローカル・ネットワーク・トラフィック、インターネット・トラフィック、サーバー応答時間など、さまざまな要素を考慮します。それらの要因は、異なる条件下では同じサービスの 2 つの呼び出しにかかる時間が異なる可能性があることを意味します。
- ご使用のアプリケーションの性質を考えてみましょう。コードがクレジット承認を待機している場合、ユーザーに対して 2 回課金する可能性を防ぐために、タイムアウト値を大きく設定できます。オンライン・オークションの入札を実行するコードの場合、ユーザーが迅速に別の入札を実行できるように、タイムアウト値を小さく設定できます。
- その差が 1 秒以上ある複数のタイムアウト値を使用します。
milliseconds のデフォルト値は、defaultServiceTimeout ビルド記述子オプションで設定できます。defaultServiceTimeout ビルド記述子オプションには設定されているデフォルト値はありません。 defaultServiceTimeout と milliseconds のいずれにも値を指定していない場合、サービス呼び出しはタイムアウトしません。詳しくは、『defaultServiceTimeout』を参照してください。
try ブロック
try ブロックを使用して、AnyException タイプの例外レコードをテストします。
try
myString = myService.myOperation(1);
onException (except AnyException)
case
when (exp isa ServiceBindingException)
;
when (exp isa ServiceInvocationException)
;
otherwise
;
end
end
エラーは次の場所で発生する可能性があります。
- サービス・バインディング。つまり、サービス・アクセスをコードで指定する方法。このエラーには、デプロイメント記述子の問題が関連している可能性があります。
- リクエスターとサービスの通信
- サービス
サービス・バインディングの問題により、ServiceBindingException が発生します。 その他の問題によって ServiceInvocationException または RuntimeException が発生することがありますが、発生する可能性は高くありません。