Service synchron außerhalb von Rich UI aufrufen

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.


Feedback