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
((BindingProvider) port).getRequestContext().put(com.ibm.websphere.webservices.jaxws.Constants.ASYNC_TIMEOUT_MILLISECONDS, 30000);
Verbindung zum fernen Host scheitert
- 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
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.
- 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
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.
- Name: ConnectionIOTimeOut
- Wert: 30
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
[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".
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.