網上解決辦法:
params.setParameter(HttpClientParams.USE_EXPECT_CONTINUE,Boolean.FALSE);
//設定ws連線逾時時間
params.setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT, 20000l);
client.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS,params);
對網上答案太失望了,一個答案打出轉載,但是估計沒有人真正試過,反正對於我的問題是錯的,如果對方機器處於關機狀態的話需要串連多次,並且設定連線時間也沒用,無奈之下去看原始碼,版本是1.2.6。
發現有個地方的代碼邏輯可能有問題:org.codehaus.xfire.transport.http.CommonsHttpMessageSender中的createClient方法,其中第233行client.setHttpConnectionManager(manager);,而252行client.setParams(params);才將我們自訂的結果設定進去,所以不行,暫時的解決辦法是:
HttpConnectionParams.getDefaultParams().setIntParameter( HttpConnectionParams.CONNECTION_TIMEOUT, (int) TIME_OUT);params.setParameter(HttpClientParams.USE_EXPECT_CONTINUE, Boolean.FALSE); params.setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT, TIME_OUT);// 單位是毫秒 params.setParameter(HttpClientParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(RETRY_TIMES, false)); // 設定重連次數 params.setParameter(HttpClientParams.SO_TIMEOUT, SO_TIMEOUT); Client c = Client.getInstance(service); c.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS, params); c.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, SO_TIMEOUT);