2010-01-13 18 views
2

我正在將JAX-RPC客戶端和服務轉換爲JAX-WS,並試圖找出如何以編程方式設置客戶端超時。這將是在WebSphere 7中運行的JAX-WS 2.1客戶端。在JAX-RPC中,我可以在SOAPBindingStub上設置一個屬性來設置超時。如何以編程方式在WebSphere 7中設置JAX-WS 2.1 JMS客戶端超時?

在JAX-WS代碼,我試過設置幾個屬性如下,沒有運氣:

PolicyFinderService policyFinderService = new PolicyFinderService(); 
PolicyFinder policyFinder = policyFinderService.getPolicyFinderSOAPPort(); 
((BindingProvider)policyFinder).getRequestContext().put(com.ibm.wsspi.websvcs.Constants.REQUEST_TIMEOUT_PROPERTY, 1); 
((BindingProvider)policyFinder).getRequestContext().put(com.ibm.wsspi.websvcs.Constants.WRITE_TIMEOUT_PROPERTY, 1); 
((BindingProvider)policyFinder).getRequestContext().put(com.ibm.wsspi.webservices.Constants.READ_TIMEOUT_PROPERTY, 1); 
((BindingProvider)policyFinder).getRequestContext().put(com.ibm.wsspi.webservices.Constants.RESPONSE_TIMEOUT_PROPERTY, 1); 
((BindingProvider)policyFinder).getRequestContext().put(com.ibm.wsspi.webservices.Constants.WRITE_TIMEOUT_PROPERTY, 1); 

這些都沒有任何效果,當我撥打電話和服務沒有運行,它只是暫停超時前的默認超時值(我認爲5分鐘)。

有沒有人找到一種方法在WebSphere 7中以編程方式設置此超時值?

回答

1

其可能的,你可能需要

((BindingProvider)policyFinder).getRequestContext().put(
    com.ibm.wsspi.webservices.Constants.CONNECTION_TIMEOUT_PROPERTY, 2000); 

可能做到這一點寫入前...可能

或許這也?

reqCtx.put(JAXWSProperties.CONNECT_TIMEOUT, 10); 
reqCtx.put(BindingProviderProperties.REQUEST_TIMEOUT, 10); 

可能REQUEST_TIMEOUT_PROPERTY實際上可能以毫秒爲單位,所以也許1低VAL被莫名其妙地四捨五入到0(無限)以後......也許嘗試2000?

+0

謝謝,我會給這兩個嘗試。 – 2010-01-13 21:24:56

+0

這是com.ibm.wsspi.webservices.Constants.CONNECTION_TIMEOUT_PROPERTY!當前的配置在連接時遇到問題,所以它甚至不會進入其他超時 - 因此需要連接超時。唯一的情況是,這是在幾秒鐘內,而不是毫秒(我使用了10的值)。但是,這正是我所期待的。謝謝! – 2010-01-13 21:41:00

+0

我嘗試了上述所有屬性,但它對響應超時沒有任何影響,我使用部署在WAS v.7上的jax-ws客戶端來調用部署在WebLogic v.10.3上的Web服務。有什麼建議麼?謝謝! – guirgis 2011-08-18 13:57:38

相關問題