我正在将JAX-RPC客户端和服务转换为JAX-WS,并试图找出如何以编程方式设置客户端超时。这将是在WebSphere 7中运行的JAX-WS 2.1客户端。在JAX-RPC中,我可以在SOAPBindingStub上设置一个属性来设置超时。
在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中以编程方式设置此超时值的方法?
答案 0 :(得分:2)
请参阅http://www.websphere-world.com/modules.php?name=News&file=article&sid=2058上的文章。 作者,这里详细介绍了为WebSphere中的JAX-WS客户端设置超时的步骤。此致,迈克
答案 1 :(得分: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以某种方式被舍入到0(无限)以后......也许会尝试2000?