服务超时问题

时间:2012-04-19 16:03:20

标签: web-services cxf

我使用WSDLToJava生成了客户端存根。之后我创建了这里提到的客户端http://cxf.apache.org/docs/developing-a-consumer

this.testService = new TestService(wsdlURL, SERVICE_NAME); //line #1
    this.port = testService.getTestPort();          //line #2
    Client client = ClientProxy.getClient(port);        //line #3
    client.getInInterceptors().add(new LoggingInInterceptor());
    client.getOutInterceptors().add(new LoggingOutInterceptor());
    HTTPConduit conduit = (HTTPConduit)client.getConduit();
    // setting timeouts for connection
    String timeOutSecond = CoreProperty.getProp(CORE_SERVICE_TIME_OUT_MILLISECONDS);
    int timeout =0;
    try{
        if(Utils.isNotNullOrBlank(timeOutSecond))
            timeout = Integer.parseInt(timeOutSecond.trim());
        else
            timeout = Constants.DEFAULT_SERVICE_TIME_OUT_MILLISECONDS;
    }catch (NumberFormatException e) {
        timeout = Constants.DEFAULT_SERVICE_TIME_OUT_MILLISECONDS;
    }
    conduit.getClient().setReceiveTimeout(timeout);

问题是,如果服务器关闭,第1行将花费将近5分钟来抛出错误 - 在wsdlURL中指定。

我想设置一个30秒的时间来建立客户端连接。

如果服务已启动,一切正常并且我已设置正常工作的receivetimeout。如何设置建立连接的超时时间。 如果服务器处于停机状态,程序正在等待#1行,它等待的时间超过4分钟,我想避免这种情况。

感谢您的时间。请帮忙

1 个答案:

答案 0 :(得分:2)

我认为唯一的选择是创建一个spring配置文件,该文件配置名为“http://servername.com/.*”的http:conduit,设置较短的超时。从该配置文件创建总线。参见:

http://cxf.apache.org/docs/client-http-transport-including-ssl-support.html