tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
1641
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Nowoline Nowoline ist offline Rookie
    Registriert seit
    Oct 2010
    Beiträge
    5
    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
     

  2. #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ß Tom
     
    Java 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

  3. #3
    Nowoline Nowoline ist offline Rookie
    Registriert seit
    Oct 2010
    Beiträge
    5
    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
     

  4. #4
    Nowoline Nowoline ist offline Rookie
    Registriert seit
    Oct 2010
    Beiträge
    5
    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
     

  5. #5
    Nowoline Nowoline ist offline Rookie
    Registriert seit
    Oct 2010
    Beiträge
    5
    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ß,
    Chris
    Geändert von Nowoline (20.10.10 um 11:46 Uhr)
     

  6. #6
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    versuchs mal mit:
    Code :
    1
    2
    
    sun.net.client.defaultConnectTimeout (default: -1)
    sun.net.client.defaultReadTimeout (default: -1)
    Eventuell werden die bei dir ja intern doch auf einen anderen Wert als die angegbenen defaults gesetzt.

    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ß Tom
     
    Java 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

  7. #7
    Nowoline Nowoline ist offline Rookie
    Registriert seit
    Oct 2010
    Beiträge
    5
    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

  1. JAX-WS Client Timeout Problem
    Von Nowoline im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 19.10.10, 17:49
  2. Serialport und Timeout Problem
    Von Reticent im Forum .NET Windows Forms
    Antworten: 4
    Letzter Beitrag: 29.12.07, 08:21
  3. Socket-timeout-Problem
    Von MeinerEiner_80 im Forum Java
    Antworten: 0
    Letzter Beitrag: 05.05.06, 15:44
  4. script timeout problem
    Von Rios im Forum PHP
    Antworten: 6
    Letzter Beitrag: 08.03.04, 11:20
  5. [Problem] Session Timeout ?
    Von Trash im Forum PHP
    Antworten: 0
    Letzter Beitrag: 18.04.02, 20:33

Stichworte