2009-10-26 23 views
1

我有一個使用PHP Web服務(在Apache上運行)的Axis 1.4(使用Spring)Web服務客戶端。這在開發環境中完美工作,但在生產環境中,在客戶端收到SOAP響應後,代碼執行直接掛在Axis庫中的某處。我已經確定使用Wireshark是從客戶角度來看,唯一的區別是,在開發環境中的SOAP響應的HTTP頭中包含條目Axis Web服務因爲沒有返回連接關閉而掛起


Connection: close 

這是在生產環境中失蹤。我的假設是,這是代碼執行掛起的原因,因爲Axis期望連接關閉標題字段。

有什麼我可以通過配置客戶端來解決這個問題嗎?如果沒有,任何提示配置Apache + PHP正確關閉連接,讚賞。

回答

4

嘗試在應用程序中設置-Dhttp.keepAlive = false系統屬性,如果可以在應用程序的其他部分禁用保持活動狀態。這可以防止java內部的HttpClient類試圖從打開的連接急切地填充BufferedInputStream。請參閱http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4479751

如果有幫助你看看你掛客戶端的堆棧跟蹤一個機會,它應該是這樣的:

java.lang.Thread.State中:RUNNABLE 在java.net.SocketInputStream .socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream。 java:258) at java.io.BufferedInputStream.read(BufferedInputStream.java:317) - locked < 0xab82fa30>(a java.io.BufferedInputStream) at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632) at sun.net.www.protocol。 http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072) - 鎖定< 0xab82c838>(一sun.net.www.protocol.http.HttpURLConnection)

的http.keepAlive基本設置確保了HttpClient的總是會發送一個按照HeavyWave的建議,'連接:關閉'。

2

您可以嘗試發送HTTP頭「連接:關閉」您的請求。