Tipps zur Fehlerbehebung für die Laufzeit von Web-Service-Clients

Verwenden Sie diese Tipps, um Probleme mit Web-Service-Clients zu beheben.

Jeder Abschnitt dieses Artikels beschreibt ein Problem, das in der Laufzeitkomponente eines Web-Service-Clients auftreten kann. Zur Unterstützung der Fehlerbehebung werden Lösungsvorschläge angeboten.

Ausnahme aufgrund von Zeitlimitüberschreitung für synchrone JAX-WS-Clients mit Eigenschaft ASYNC_TIMEOUT_MILLISECONDS vermeiden

Wenn Ihre synchronen JAX-WS-Clients (Java™ API for XML-based Web Services) die Web-Service-Ausnahme org.apache.axis2.AxisFault: Zeitlimitüberschreitung beim Warten auf eine Antwort vom Server empfangen, setzen Sie die Eigenschaft für asynchrones Zeitlimit, com.ibm.websphere.webservices.jaxws.Constants.ASYNC_TIMEOUT_MILLISECONDS, im Client, um den zulässigen Zeitraum für die Antwort des Servers festzulegen. Geben Sie das Zeitlimit in Millisekunden an, um festzulegen, wie lange auf eine Antwort auf eine asynchrone Anforderung gewartet wird. Das folgende Beispiel veranschaulicht, wie diese Eigenschaft gesetzt wird:
 ((BindingProvider) port).getRequestContext().put(com.ibm.websphere.webservices.jaxws.Constants.ASYNC_TIMEOUT_MILLISECONDS, 30000);

Verbindung zum fernen Host scheitert

Wenn der Fehler WSWS3713E: Die Verbindung zum fernen Host Hostname ist fehlgeschlagen angezeigt wird, wenn Sie versuchen, eine Verbindung zum fernen Host herzustellen, prüfen Sie Folgendes:
  • Wenn der in der Fehlernachricht angegebene Hostname korrekt ist, müssen Sie sicherstellen, dass die Anwendung mit dem Web-Service aktiv und verfügbar ist.
  • Wenn der in der Fehlernachricht angegebene Hostname falsch ist, müssen Sie möglicherweise die WSDL-Datei für den Web-Service aktualisieren oder den Endpunkt-URL überschreiben, den der Hostname verwenden muss. Zum Überschreiben des Web-Service-Endpunkt-URL und zum Konfigurieren der Portinformationen verwenden Sie die Informationen zum Konfigurieren von Bindungsinformationen für Web-Service-Clients.

Ausführung des Web-Service-Clients mit einer Datei ibm-jaxrpc-client.jar in einer Solaris-Umgebung kann eine Ausnahme auslösen

Wenn Sie die Option -jar verwenden, z. B. java -jar <Java-Anwendung>.jar, um eine Java-Anwendung in einer Solaris-Umgebung anzugeben, kann eine Ausnahme des Typs "Klasse nicht gefunden" ausgelöst werden. Damit diese Ausnahme nicht eintritt, können Sie beispielsweise die Option -classpath anstelle der Option -jar verwenden. Beispiel:
java -jar <Ihre_Clientanwendung>.jar, <Datei_der_Klasse_main>

Dieses Problem tritt auf, weil die Spezifikation des Sun JDK für das Laden von Klassen strenger ist als die Spezifikation des IBM® JDK.

Sie können eine von drei Änderungen vornehmen, um die Ausnahme zu verhindern:
  • Verwenden Sie die Option -classpath anstelle der Option -jar. Beispiel:
    java -jar <Java-Anwendung>.jar, <Datei_der_Klasse_main >
  • Verwenden Sie die Option -Djava.ext.dirs mit der Option -jar . Beispiel:
    export WAS_HOME=/opt/IBM/WebSphere/AppServer ${WAS_HOME}/java/jre/bin/java 
    -Djava.ext.dirs=${WAS_HOME}/runtimes 
    -jar <Ihre_Clientanwendung>.jar, <Ihre_Clientanwendung>.args
  • Ändern Sie den Klassenpfad in der Datei Manifest.MF, und fügen Sie die benötigten JAR-Dateien (Java Archive) hinzu. Beispiel:
    Class Path: /opt/IBM/WebSphere/AppServer/runtimes/ibm-jaxrpc-client.jar 

Bei der DNS-Auflösung kann es bei der Verwendung von HTTP für die Verbindungsherstellung zu einer Serviceendpunktschnittstelle, die nicht auf einer privaten IP-Adresse basiert, zu Leistungsproblemen kommen

Der DNS-Service ist häufig nicht verfügbar, wenn Sie HTTP verwenden, um eine Verbindung zu einer Serviceendpunktschnittstelle herzustellen, die auf einer privaten IP-Adresse basiert. Deshalb kann es während der DNS-Auflösung zu Leistungseinbußen kommen.

Dieses Problem tritt auf, wenn der Connector für abgehende HTTP-Anforderungen in der Web-Service-Engine versucht, den Hostadressnamen aufzulösen und dabei das zulässige Zeitlimit überschreitet.

Sie können die DNS-Auflösung umgehen, indem Sie in der Datei HOSTS den Eintrag für die Ziel-IP-Adresse ändern.

Laufzeitfehler bei der Migration

Wenn Sie eine Web-Service-Anwendung installiert haben, die für eine Version vor WebSphere Application Server 6 entwickelt wurde, kann die folgende Ausnahme angezeigt werden:
WSWS3701E: Fehler: Es ist eine Ausnahme eingetreten. Verwenden Sie den Befehl wsdeploy, um Ihre Anwendung zu implementieren. Dadurch wird der Fehler möglicherweise behoben.
Diese Ausnahme ist <Ausnahmedaten>.

Diese Ausnahme zeigt an, dass ein Fehler bei der Ausführung der Anwendung, die mit Tools erstellt wurde, die in früheren Versionen vor Version 6 unterstützt wurden, aufgetreten ist. Sie können den Fehler beheben, indem Sie die Anwendung deinstallieren, den Befehl wsdeploy ausführen und die Anwendung anschließend erneut implementieren.

Der Befehl wsdeploy wird von JAX-RPC-Anwendungen (Java API for XML-based RPC) unterstützt. Das Programmiermodell Java API for XML-Based Web Services (JAX-WS), das vom Anwendungsserver implementiert wird, unterstützt den Befehl wsdeploy nicht. Wenn Ihre Web-Service-Anwendung nur JAX-WS-Endpunkte enthält, müssen Sie den Befehl wsdeploy nicht ausführen, da dieser Befehl nur zur Verarbeitung von JAX-RPC-Endpunkten verwendet wird.

Für bestimmte WSDL-Dateien löst die Laufzeitumgebung des Anwendungsservers eine Ausnahme vom Typ WebServicesFault aus.

In der Laufzeitumgebung des Anwendungsservers wird eine Ausnahme vom Typ WebServicesFault für WSDL-Dateien angezeigt, die Operationen mit document style und literal use definieren und den SOAP-Header für die Übertragung der Eingabedaten verwenden.

Wenn die WSDL-Dateien die Operation mit document style und literal use definieren und diese Operation die Eingabe dem SOAP-Header zuweist, kann die Web-Service-Laufzeitumgebung nicht die richtige Operation für den Zielservice finden und löst eine Ausnahme vom Typ WebServicesFault aus.

Zum Beheben dieses Fehlers müssen Sie die WSDL-Dateien so ändern, dass die Operation keine Eingaben verwendet, die den SOAP-Header für die Datenübertragung verwenden.

Wert des Parameters ConnectionIOTimeOut erhöhen, um beim Hosting von Web-Services Ausnahmen zu verhindern

Wenn Web-Services in WebSphere Application Server implementiert werden, wird die folgende Ausnahme angezeigt: java.net.SocketTimeOutException: Read Timed Out.

Dieses Problem ist auf eine langsame Netzverbindung zwischen dem Client und dem Web-Service zurückzuführen. In solchen Fällen kann eine Zeitlimitüberschreitung beim HTTP-Socket auftreten, bevor die Web-Service-Engine die SOAP-Anforderung vollständig gelesen hat. In den meisten Fällen ist das Problem auf einen plötzlichen Anstieg der gesamten Netzaktivität zurückzuführen. Das Problem kann auch auftreten, wenn der Client über eine langsame Netzverbindung auf den Web-Service zugreift und wenn die SOAP-Anforderung viele Daten enthält.

Zum Beheben dieses Fehlers erhöhen Sie den Wert des Parameters ConnectionIOTimeOut für die HTTP-Transporte des Web-Containers. Der Standardwert ist 5 Sekunden. Sie können den Wert auf 30 Sekunden oder mehr erhöhen. Informationen zum Definieren des Wertes in der Administrationskonsole finden Sie im Artikel "Angepasste Eigenschaften für HTTP-Transporte". Geben Sie folgenden Eigenschaftsnamen und -wert ein:
  • Name: ConnectionIOTimeOut
  • Wert: 30
Wenn der Web-Service in einer Clusterumgebung enthalten ist, setzen Sie die Eigenschaft für jeden Anwendungsserver im Cluster. Falls der Anwendungsserver an mehreren Ports empfangsbereit ist, legen Sie diese Eigenschaft für alle Ports fest.

Wert des Parameters syncTimeout erhöhen, um beim Hosting von Web-Service-Clients Ausnahmen zu verhindern

Wenn der vom Web-Service-Client verwendete Parameter syncTimeout nicht richtig gesetzt ist, wird möglicherweise auch die Fehlernachricht java.net.SocketTimeOutException: Read Timed Out angezeigt. Das ist wichtig zu wissen, denn wenn Sie den Parameter ConnectionIOTimeout auf Null setzen mit der Erwartung, dass ein Zeitlimit, wie im Artikel "Angepasste Eigenschaften für HTTP-Transporte" dargestellt, verhindert werden kann, wird lediglich das Verbindungszeitlimit verhindert. Der einzige Weg, sicherzustellen, dass eine Anforderung von einem HTTP-Client, der ein Web-Service-Client sein kann, kein Zeitlimit hat, besteht darin, den Wert des Parameters syncTimeout zu erhöhen.

Der Parameter syncTimeout wird nur vom Web-Service-Client verwendet. Dieser Parameter kann im Web-Service-Stub gesetzt werden, der ein Zeitlimit für den Web-Service-Aufruf darstellt.

Zum Beheben dieses Fehlers erhöhen Sie den Wert des Parameters syncTimeout für den Web-Service-Client. Wie Sie diesen Parameter definieren, können Sie in den Informationen zum Konfigurieren der JAX-RPC-Web-Service-Clientbindungen im Implementierungsdeskriptor "ibm-webservicesclient-bnd.xmi" nachlesen.

Ausführung einer Web-Service-Clientanwendung mit aktivierter Sitzungspersistenz oder in einer Clusterumgebung kann einen Fehler vom Typ WebServicesFault auslösen

Wenn Sie eine Web-Service-Clientanwendung mit aktivierter Sitzungspersistenz oder in einer Clusterumgebung ausführen, kann ein Fehler angezeigt werden, weil der Web-Service-Client versucht, eine Verbindung zu verwenden, die bereits vom HTTP-Server geschlossen wurde. Das folgende Beispiel zeigt einen solchen Fehler:
[mm/dd/yy hh:mm:ss:ttt EST] 0000006e SystemErr     R WebServicesFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
 faultString: java.io.IOException: Connection close: Read failed.Possible end of 
stream encountered. 
 faultActor: null
 faultDetail: 
Sie können diesen Fehler auf die folgenden beiden Arten verhindern:
  • Setzen Sie die Eigenschaft com.ibm.websphere.webservices.http.requestResendEnabled auf true, z. B. com.ibm.websphere.webservices.http.requestResendEnabled=true. Wenn diese Eigenschaft auf true gesetzt ist, sendet der Web-Service-Client die Anforderung erneut, wenn die Anforderung fehlgeschlagen ist. Überwachen Sie die Laufzeitumgebung Ihres Clients, wenn Sie den Eigenschaftswert ändern, weil die Anforderung unter Umständen zweimal gesendet wird.

    Wenn Ihr Client beispielsweise ein Finanzanwendung ist und Sie die Eigenschaft com.ibm.websphere.webservices.http.requestResendEnabled auf true setzen, kann eine Transaktion zweimal auf ein Konto gebucht werden. Informationen zum Konfigurieren der Eigenschaft "com.ibm.websphere.webservices.http.requestResendEnabled" finden Sie im Artikel "Zusätzliche HTTP-Transporteigenschaften mit der Anzeige 'Angepasste JVM-Eigenschaften' in der Administrationskonsole konfigurieren".

  • [Linux]Wenn Sie IBM HTTP Server unter dem Betriebssystem AIX oder Linux verwenden, können Sie die Eigenschaft "MaxSpareThreads" auf denselben Wert wie die Eigenschaft "MaxClients" in der Datei httpd.conf setzen. Ist beispielsweise MaxClients=600 eingestellt, ändern Sie den Wert von MaxSpareThreads in 600 (MaxSpareThreads=600).

    Der Vorteil dieses Verfahrens ins, dass IBM HTTP Server inaktive oder nahezu inaktive Threads nicht beendet. Der Nachteil ist, dass IBM HTTP Server übermäßig viele Ressourcen belegt, um selbst bei geringem Aktivitätsaufkommen die zusätzlichen Threads bereitzuhalten. Dieses Verfahren ist nur auf die Betriebssysteme AIX und Linux anwendbar.


Symbol, das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwbs_trbclientruntime
Dateiname:rwbs_trbclientruntime.html