如何在客户端控制webservice调用的timeout

本文介绍了在CXF、Xfire及JAX-WS中如何为Web服务客户端设置超时时间,包括连接超时与响应超时,并展示了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,在CXF生成的stub的客户端,方式如下(CXF2.1.1):

        SimpleServiceService srv = new SimpleServiceService();
        SimpleService servicePort = srv.getSimpleServicePort();
   
        //timeout setting
        Client cl = ClientProxy.getClient(servicePort);

        HTTPConduit http = (HTTPConduit) cl.getConduit();

        HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
        httpClientPolicy.setConnectionTimeout(10000);
        httpClientPolicy.setReceiveTimeout(1000);
        http.setClient(httpClientPolicy);
       
        servicePort.concatenate("111", "2222");

其中SimpleServiceService是自动生成的stub类.

 

2,在Xfire生成的stub的客户端,方式如下(Xfire1.26):

        SimpleServiceServiceClient serviceClient= new SimpleServiceServiceClient();
        SimpleService  servicePort = serviceClient.getSimpleServicePort();
       
        HttpClientParams params = new HttpClientParams();
        params.setParameter(HttpClientParams.USE_EXPECT_CONTINUE, Boolean.FALSE);
        // set connection timeout
        params.setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT, 2L);
        //set response timeout
        params.setIntParameter(HttpClientParams.SO_TIMEOUT,2);
       
        Client client = Client.getInstance(servicePort);
        client.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS, params);
       
        System.out.println(servicePort.concatenate("xfire1", "xfire2"));

其中SimpleServiceServiceClient 是自动生成的stub类.

 

上面两种方式都是通过控制底层的http连接来达到timeout控制,如果超时会抛出 java.net.SocketTimeoutException: Read timed out.

 

3,jax-ws的客户端:同样利用CXF的ClientProxy控制http连接:

        URL wsdlURL = new URL("file:///D:/JAVAWorkspace/Repository/prjCXFWS/src/wsdl/prjCXFWS.wsdl");
       
        QName serviceQName = new QName("http://test.cxfws.com/", "SimpleServiceService");
       
        QName portQName = new QName("http://test.cxfws.com/", "SimpleServicePort");
       
        Service service = Service.create(wsdlURL, serviceQName);
       
       
        //set handler
        service.setHandlerResolver(new RequestOrderHandlerResolver());
       
        SimpleService port = (SimpleService) service.getPort(portQName, SimpleService.class);


        //timeout setting
        Client cl = ClientProxy.getClient(port);

        HTTPConduit http = (HTTPConduit) cl.getConduit();

        HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
        httpClientPolicy.setConnectionTimeout(10000);
        httpClientPolicy.setReceiveTimeout(1000);
        http.setClient(httpClientPolicy);

        System.out.println(port.concatenate("srt1", "srt2"));

 

4,jax-Dispatch,在网上搜索到有人说用以下方式:试了一下不好用.

dispatch.getRequestContext().put("com.sun.xml.ws.request.timeout", 1000);

 

 

 

 

 

 

 

Rebuild started: Project: Project *** Using Compiler 'V6.22', folder: 'E:\Keil_v5\ARM\ARMCLANG\Bin' Rebuild target 'Target 1' assembling startup_stm32f10x_md.s... Start/core_cm3.c(445): error: non-ASM statement in naked function is not supported 445 | uint32_t result=0; | ^ Start/core_cm3.c(442): note: attribute is here 442 | uint32_t __get_PSP(void) __attribute__( ( naked ) ); | ^ Start/core_cm3.c(465): error: parameter references not allowed in naked functions 465 | "BX lr \n\t" : : "r" (topOfProcStack) ); | ^ Start/core_cm3.c(461): note: attribute is here 461 | void __set_PSP(uint32_t topOfProcStack) __attribute__( ( naked ) ); | ^ Start/core_cm3.c(479): error: non-ASM statement in naked function is not supported 479 | uint32_t result=0; | ^ Start/core_cm3.c(476): note: attribute is here 476 | uint32_t __get_MSP(void) __attribute__( ( naked ) ); | ^ Start/core_cm3.c(499): error: parameter references not allowed in naked functions 499 | "BX lr \n\t" : : "r" (topOfMainStack) ); | ^ Start/core_cm3.c(495): note: attribute is here 495 | void __set_MSP(uint32_t topOfMainStack) __attribute__( ( naked ) ); | ^ 4 errors generated. compiling core_cm3.c... compiling misc.c... compiling system_stm32f10x.c... compiling stm32f10x_adc.c... compiling stm32f10x_dac.c... compiling stm32f10x_exti.c... compiling stm32f10x_dbgmcu.c... compiling stm32f10x_dma.c... compiling stm32f10x_crc.c... compiling stm32f10x_cec.c... compiling stm32f10x_bkp.c... compiling stm32f10x_can.c... compiling stm32f10x_flash.c... compiling stm32f10x_pwr.c... compiling stm32f10x_fsmc.c... compiling stm32f10x_
03-31
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值