In einem JAX-WS web service, wie kann ich die force-a-Buchse schließen Sie nach jedem Soap-Aufruf zurückgegeben wird?
Ich bin mit com.Sonne.httpserver.HttpServer und javax.xml.ws.Endpoint zur Veröffentlichung eines JAX-WS web service generiert wurde, durch ausführen von wsimport auf einer bestehenden WSDL und Umsetzung der genereated-service-Schnittstelle. All dies war Teil des JDK 1.6 (JAX-WS RI 2.1.6). Meine web-service, läuft als Java-Programm ohne zusätzlichen Web-container simulieren soll eine vorhandene SOAP-service, der implementiert wurde, unter Verwendung von Apache Axis, läuft auf Tomcat. Bestehende Kunden werden ebenfalls implementiert, unter Verwendung von Apache Axis.
Das problem, das ich habe ist, dass Soap-operation, die Anrufe von den Kunden zu meiner JAX-WS service hängen für eine Weile, und dann ist Ende mit der Buchse time-out auf der Seite des Kunden. Dies tritt auf, obwohl die JAX-WS-service ist wieder in die SOAP-Antwort sofort.
Inspektion der Pakete mit tcpdump und wireshark habe ich festgestellt, dass mit den vorhandenen Axis web service, nach dem SOAP-Antwort gesendet wird vom server an den client, sendet der server eine "FIN-ACK" - Paket, zu dem die clients antwortet mit "FIN, ACK". Dies schließt alle Pakete, die relevant für die SOAP-operation. Auf der anderen Seite, wenn Sie das laufen mit der JAX-WS-service, der server sendet keinen "FIN, ACK", die nach der SOAP-Antwort an den client gesendet wird. Und scheint der client Lesen Sie den socket-input-stream für es.
Dies führt mich zu glauben, dass die JAX-WS-web-service-stack ist irgendwie halten die socket öffnen, selbst nach der Antwort auf eine SOAP-Aufruf gesendet wurde. Und es scheint, dass der client erwartet, dass die Buchse zu schließen am Ende einen SOAP-Vorgang. Ich kann leider nicht ändern, der client, sich anders zu Verhalten.
Gibt es eine Möglichkeit, konfigurieren Sie den Endpunkt oder die HttpServer-Instanzen, ich bin mit zu veröffentlichen, die JAX-WS-service, um immer einen socket schließen nach jeder SOAP-operation?
Ich habe versucht, die Einstellung der system-property http.keepAlive auf false, aber das scheint nicht zu keinen Unterschied machen.
Dank im Voraus für Eure Hilfe.
http.keepAlive
würde nicht funktionieren, da es für die Konfiguration derhttpurlconnection
dassJAX-WS
verwendet unter der Haube für die client-Seite
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich einen Weg gefunden, um dieses problem, aber es ist nicht sehr elegant. Im Grunde bekomme ich den HttpHandler Objekt aus HttpContext, nachdem es erstellt wurde, indem Sie den Endpunkt.publish-Vorgang. Und ich nenne das handle () - Methode von einem anderen HttpHandler-Klasse, die ich schrieb, folgt es durch das senden einer HttpHeader mit "Verbindung" auf "schließen". So etwas wie dieses:
Es funktioniert für meine aktuelle Bedürfnisse, aber es scheint nur, wie es der bessere Weg zu sein. Bitte posten, wenn Sie eine andere Lösung haben. Danke!