2010-02-07 59 views
3

我已經在Sun輕量級http服務器上發佈了Web服務端點。服務器正在使用ThreadPool執行程序進行連接(Executors.newCachedThreadPool())。 我也使用常規的Web服務客戶端(也是JAX-WS)。JAX-WS超時問題

看來,對於每個超過5分鐘的呼叫,服務器(或客戶端)結束當前呼叫線程並打開一個新線程。在服務器中,它看起來像建立了一個新的連接並嘗試運行相同的操作。

這隻發生一次,這意味着「第二次電話」可能會超過5分鐘。

是否有連接的默認超時?有沒有辦法配置它?

回答

0

其實我能夠通過使用Pascal提供的信息找到黑客(謝謝!)。 您可以通過設置系統屬性-sun.net.httpserver.idleInterval來覆蓋http服務器的空閒時間。

1

我通常會認爲這是一個客戶端問題(然而 - 檢查帕斯卡的答案)。客戶將有一個定義的超時值,並將花費太長時間的操作。

例如在HttpClient中,您可以分別定義連接超時和讀取超時(請參閱the configuration guide)。

如果方法確實需要5分鐘或更長時間,我會考慮如何將操作分解爲更加獨立的操作,每個操作都需要較短的時間。或者在後臺進行處理,併爲客戶提供一張票據,以便他們以後可以在不保持連接的情況下收到結果。

或者,你可以能夠設置爲無限超時,但我不建議這一點,因爲你的客戶的理想應該能夠確定當你的服務器沒有響應,由於問題/配置錯誤等

+0

您也可以爲我正在使用的Web服務客戶端定義超時屬性: Map requestContext = bp.getRequestContext(); \t \t \t \t requestContext.put(JAXWSProperties.CONNECT_TIMEOUT,); requestContext.put(JAXWSProperties.REQUEST_TIMEOUT,); 但是,這並沒有幫助。 – Tal 2010-02-07 18:23:43

+0

@Brian這實際上不是客戶端問題。 – 2010-02-07 18:56:24

+0

@帕斯卡爾 - 指出(我還沒有看過你提供的鏈接)。你知道Jetty是否不以類似的方式保留空閒連接?請注意,我已經適當地編輯了我的答案(!),但我認爲對於5分鐘的操作,客戶端超時問題將在某個階段發揮作用,因此我沒有刪除它。 – 2010-02-07 19:04:46