ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
1641
1641
EMPFEHLEN
-
Hallo Zusammen!
Hoffentlich hab ich gerade die richtige Stelle zum Posten gefunden... Ich habe ein Problem mit unserem JAX-WS Web Service:
- Eine Anfrage wird vom Client verschickt
- Der Web Service durchläuft die angesprochene Methode und führt über eine Prozedur eine mehr als 5 minütige Berechnung auf unserem SQL-Server aus.
- Nach ca. 300 Sekunden (= Standard Client Timeout?) wird die WebService Methode (void, also kein Rückgabewert, aber Client wartet gewollt ab, bis Methode ausgeführt wurde) einmalig erneut ausgeführt: Die Berechnung wird also zeitversetzt doppelt durchgeführt. Wir haben verschiedene Tools, bei denen jeweils mehrere Methoden mehr als 5min für die Ausführung brauchen -> großes Problem!
Ich habe jetzt bereits seit Tagen das Internet nach Lösungen durchforstet und komme einfach nicht weiter. Folgende Properties für den WS-Port habe ich schon in allen Variationen implementiert und getestet:
Code :1 2 3 4 5 6 7 8 9 10
System.setProperty("sun.net.client.defaultReadTimeout","5000000"); System.setProperty("sun.net.client.defaultConnectTimeout","5000000"); ((BindingProvider)this.getPOSServiceImplPort()).getRequestContext().put("com.sun.xml.ws.request.timeout", 3000000); ((BindingProvider)this.getPOSServiceImplPort()).getRequestContext().put("com.sun.xml.ws.connect.timeout", 3000000); ((BindingProvider)this.getPOSServiceImplPort()).getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 3000000); ((BindingProvider)this.getPOSServiceImplPort()).getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", 3000000); ((BindingProvider)this.getPOSServiceImplPort()).getRequestContext().put("sun.net.client.defaultConnectTimeout", 3000000); ((BindingProvider)this.getPOSServiceImplPort()).getRequestContext().put("sun.net.client.defaultReadTimeout", 3000000); ((BindingProvider)this.getPOSServiceImplPort()).getRequestContext().put(BindingProviderProperties.CONNECT_TIMEOUT, 3000000); ((BindingProvider)this.getPOSServiceImplPort()).getRequestContext().put(BindingProviderProperties.REQUEST_TIMEOUT, 3000000);
Welche Zeit in Millisekunden ich dabei eingebe, ist unerheblich: Der Timeout bleibt gleich und die Methode wird unverändert nach 5min ungewollt ein zweites Mal ausgeführt. Es ist zum Haare raufen :-/
Weiterhin wurde das Tool mittlerweile auf mehreren Servern mit verschiedenen WebServices getestet – immer mit dem gleichen Ergebnis. Einzige Ausnahme: Ich habe zu Hause einen 64bit Vista Rechner, von dem aus die WebService-Methode wie gewünscht nur einmal ausgeführt wurde. Als Property wurde da gesetzt:
Code :1 2
((BindingProvider)this.getPOSServiceImplPort()).getRequestContext().put("sun.net.client.defaultConnectTimeout", -1); ((BindingProvider)this.getPOSServiceImplPort()).getRequestContext().put("sun.net.client.defaultReadTimeout", -1);
Diese Einstellungen führen aber auf unseren XP-Rechnern nicht zum identischen Ergebnis.
Die von uns genutzte JRE/JDK Version ist 1.6.0_22.
Ich wäre für hilfreiche Ratschläge sehr sehr dankbar!
Grüße,
Chris
-
19.10.10 18:00 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
hat dein Problem vielleicht hiermit zu tun?
http://bugs.sun.com/bugdatabase/view...bug_id=6382788
Probiers mal mit dem System.Property -> sun.net.http.retryPost=false
java -Dsun.net.http.retryPost=false ....
Siehe auch:
http://download.oracle.com/javase/6/...roperties.html
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo,
danke für die schnelle Antwort!
Es kann gut sein, dass der von dir angegebene Bug etwas damit zu tun hat. Ich werde es morgen früh ausprobieren und eine Rückmeldung dazu geben. Momentan sind mir da die Hände gebunden, da ich den Fehler zu Hause leider nicht reproduzieren kann.
Vielen Dank erstmal!
Gruß,
Chris
-
Guten Morgen,
vielen Dank für deinen Beitrag - es hat geholfen! Ich habe folgende Zeile in die Main-Methode unseres Tools implementiert:
Code :1
System.setProperty("sun.net.http.retryPost","false");
Also, danke nochmal und frohes Schaffen noch
Gruß,
Chris
-
Hallo,
ich habe mich anscheinend zu früh gefreut. Die Methode wird nun wie gewollt auf dem WebService nur einmalig ausgeführt - das führt allerdings dazu, dass nach ca. 5min (also wieder eine Timeout-Einstellung würde ich vermuten) ein Fehler auf Client-Seite entsteht:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Exception in thread "Thread-8" javax.xml.ws.WebServiceException: java.net.SocketException: Unexpected end of file from server at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.readResponseCodeAndMessage(HttpClientTransport.java:201) at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:151) at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83) at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105) at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587) at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546) at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531) at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428) at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211) at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124) at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98) at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78) at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107) at $Proxy27.setBerechnung(Unknown Source)
Offensichtlich wird die Methode zwar nur einmal ausgeführt, dafür aber die Verbindung zum Client nach 5min unterbrochen. Das wiederholte Setzen der BindingProvider-Eigenschaften (s.o.) hat keinen Effekt. Ich habe den Eindruck, dass keine der von mir gesetzten Timeout-Einstellungen tatsächlich angenommen und umgesetzt wird. Wie kommt das? Mittlerweile benutze ich folgende BindingProvider-Einstellung:
Code :1 2
((BindingProvider)this.getPOSServiceImplPort()).getRequestContext().put(BindingProviderProperties.CONNECT_TIMEOUT, -1); ((BindingProvider)this.getPOSServiceImplPort()).getRequestContext().put(BindingProviderProperties.REQUEST_TIMEOUT, -1);
- Wie kann ich o.a. "Unexpected end of file"-Fehler unterbinden?
- Gibt es eigentlich eine Möglichkeit, den Timeout beim WebService selbst festzulegen? Ist das überhaupt sinnvoll? Im Großen und Ganzen scheint es sich ja um einen Timeout-Fehler zu handeln - client- oder serverseitig.
Gruß,
ChrisGeändert von Nowoline (20.10.10 um 11:46 Uhr)
-
20.10.10 11:50 #6
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
versuchs mal mit:
Eventuell werden die bei dir ja intern doch auf einen anderen Wert als die angegbenen defaults gesetzt.Code :1 2
sun.net.client.defaultConnectTimeout (default: -1) sun.net.client.defaultReadTimeout (default: -1)
Ansonsten schau mal hier:
https://jax-ws.dev.java.net/guide/HTTP_Timeouts.html
Hmmm... könnte auch ein Problem auf der Serveseite sein... siehe hier:
http://stackoverflow.com/questions/2217660
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo,
dank deinem 2. Link im letzten Post (http://stackoverflow.com/questions/2217660) habe ich jetzt tatsächlich den Fehler gefunden
Vor ein paar Tagen hatte ich mir den Post auf der Seite schon mal angeschaut, war damals aber noch der Überzeugung, dass es sich um einen clientseitigen Fehler handeln muss, da es von mir zu Hause aus auf einem Vista-System ja funktioniert hat.
Also, einzige Änderung:
Code :1
System.setProperty("sun.net.httpserver.idleInterval", "3600");
, wobei "3600" = Zeit in sek = 1h. Diese Einstellung habe ich auf der WebService-Seite in die Main-Methode implementiert - funktioniert!
Die Client-Timeout Einstellungen müssen nicht beachtet werden, es handelt sich in diesem Fall um ein serverseitiges Problem.
Vielen Dank Tom!
Gruß,
Chris
Ähnliche Themen
-
JAX-WS Client Timeout Problem
Von Nowoline im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 19.10.10, 17:49 -
Serialport und Timeout Problem
Von Reticent im Forum .NET Windows FormsAntworten: 4Letzter Beitrag: 29.12.07, 08:21 -
Socket-timeout-Problem
Von MeinerEiner_80 im Forum JavaAntworten: 0Letzter Beitrag: 05.05.06, 15:44 -
script timeout problem
Von Rios im Forum PHPAntworten: 6Letzter Beitrag: 08.03.04, 11:20 -
[Problem] Session Timeout ?
Von Trash im Forum PHPAntworten: 0Letzter Beitrag: 18.04.02, 20:33





Zitieren

Login





