Serviceaufrufe außerhalb von Rich UI erfolgen immer synchron. Dies bedeutet, dass der
Anforderer auf eine Antwort des Service wartet.
Im Folgenden ist die Syntax der Servicezugriffsanweisung aufgeführt:
returnValueVariable = serviceName.operationName(argumentList) {timeout = milliseconds};
- returnValueVariable
- Der Name der Variablen, die den Rückgabewert empfängt.
- serviceName
- Der Name der Variablen, der auf einem Schnittstellen- oder Serviceabschnitt basiert.
- operationName
- Der Name des Funktionsprototyps für den Schnittstellenabschnitt.
- argumentList
- Eine Liste mit Argumenten, die jeweils durch ein Komma voneinander getrennt sind.
Einschränkungen in Bezug auf Argumente finden Sie in 'Einschränkungen bei den für den Servicezugriff
verwendeten Prototypen'.
- milliseconds
- Die maximal gültige Anzahl von Millisekunden zwischen dem Aufruf eines Web-Service durch den
EGL-Laufzeitcode und dem Empfang einer Antwort durch den EGL-Laufzeitcode. Bei einer
Überschreitung dieses Werts löst der EGL-Laufzeitcode eine Ausnahmebedingung vom Typ
ServiceInvocationException aus. Diese Einstellung hat jedoch keine Auswirkungen
auf EGL-generierten COBOL-Code.
Gehen Sie wie folgt vor, um ein Zeitlimit festzulegen:
- Beziehen Sie verschiedene Faktoren wie den Datenaustausch im lokalen Netz, den Datenverkehr im Internet
und die Serverantwortzeit in Ihre Überlegungen ein. Aufgrund dieser Faktoren ist es wahrscheinlich, dass zwei
Aufrufe desselben Service unter verschiedenen Bedingungen unterschiedlich viel Zeit in Anspruch nehmen.
- Berücksichtigen Sie die Art der Anwendung. Wenn der Code auf eine Kreditzusage wartet, müssen Sie unter
Umständen einen hohen Zeitlimitwert definieren, damit der Benutzer die Gebühr nicht zweimal zahlen
muss. Wenn der Code ein Gebot bei einer Online-Auktion abgibt, müssen Sie unter Umständen einen niedrigen Zeitlimitwert
angeben, damit der Benutzer schnell weitere Gebote abgeben kann.
- Verwenden Sie Zeitlimitwerte, die sich um eine oder mehrere Sekunden voneinander
unterscheiden.
In der Builddeskriptoroption defaultServiceTimeout
kann ein Standardwert für milliseconds festgelegt
werden. Für die Builddeskriptoroption defaultServiceTimeout ist kein Standardwert
definiert. Wenn Sie für defaultServiceTimeout oder
milliseconds keinen Wert angeben, gibt es für den Serviceaufruf kein
Zeitlimit. Weitere Informationen finden Sie in 'defaultServiceTimeout'.
try-Blöcke
Verwenden Sie einen try-Block, um auf einen
Ausnahmedatensatz des Typs AnyException zu testen:
try
myString = myService.myOperation(1);
onException (except AnyException)
case
when (exp isa ServiceBindingException)
;
when (exp isa ServiceInvocationException)
;
otherwise
;
end
end
Fehler können an den folgenden Stellen auftreten:
- In einem Service-Binding; das heißt, in welcher Weise der Servicezugriff in Ihrem Code definiert
ist. Dieser Fehler kann ein Problem im Implementierungsdeskriptor beinhalten.
- Bei der Kommunikation zwischen dem Anforderer und dem Service.
- Im Service.
Ein Problem in einem Service-Binding löst eine Ausnahmebedingung vom Typ
ServiceBindingException aus.
Andere Probleme lösen eine Ausnahmebedingung vom Typ ServiceInvocationException oder
(weniger wahrscheinlich) vom Typ RuntimeException aus.