`

CXF发送、接收消息超时设置

阅读更多

在使用WebService时,我们通常都会在客户端中设置请求超时的限制,以避免长时间的去连接不可用的服务器。在CXF的环境下,客户端可通过两个属性配置超时限制:

  • ConnectionTimeout - WebService以TCP连接为基础,这个属性可以理解为TCP握手时的时间设置,超过设置的时间就认为是连接超时.以毫秒为单位,默认是30000毫秒,即30秒。 
  • ReceiveTimeout - 这个属性是发送WebService的请求后等待响应的时间,超过设置的时长就认为是响应超时.以毫秒为单位,默认是60000毫秒,即60秒.
       Client client = ClientProxy.getClient(port);  
       HTTPConduit http = (HTTPConduit) client.getConduit();  
       HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();  
       httpClientPolicy.setConnectionTimeout(36000);  
       httpClientPolicy.setAllowChunking(false);  
       httpClientPolicy.setReceiveTimeout(32000);  
       http.setClient(httpClientPolicy); 

 spring+cxf配置方式:

<?xml version="1.0" encoding="UTF-8"?>    
   <beans xmlns="http://www.springframework.org/schema/beans"    
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
        xmlns:jee="http://www.springframework.org/schema/jee"    
        xmlns:jaxws="http://cxf.apache.org/jaxws"    
        xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"     
        xsi:schemaLocation="http://www.springframework.org/schema/beans   
             http://www.springframework.org/schema/beans/spring-beans-2.0.xsd    
             http://www.springframework.org/schema/jee   
             http://www.springframework.org/schema/jee/spring-jee-2.0.xsd    
             http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd    
             http://cxf.apache.org/transports/http/configuration   
             http://cxf.apache.org/schemas/configuration/http-conf.xsd ">    
       <http-conf:conduit name="{WSDL Namespace}portName.http-conduit">     
          <http-conf:client ConnectionTimeout="10000" ReceiveTimeout="20000"/>    
       </http-conf:conduit>     
   </beans>

 

这里需要注意的有几个地方:  
   1、需要指定http-conf名称空间:xmlns:http-conf=http://cxf.apache.org/transports/http/configuration。
   2、指定模式位置: http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd。
   3、http-conf:conduit中的name属性,指定设置生效的服务。name属性由service的namespace、WSDL中的 port name和".http-conduit"组成,如{http://apache.org/hello_world}HelloWorld.http- conduit。如果将name属性设置为“*.http-conduit”,则会对所有服务生效。

     另外,WSDL中的endpoint的地址不一定是有效的,为避免客户端请求使用该地址,我们在请求前应通过以下方式强行设置为可用的服务地址。
  ((BindingProvider) port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,serviceUrl);

分享到:
评论
2 楼 peak 2012-03-30  
tangduDream 写道
我想问你一个问题,为什么我配置:
//超时设置
Client clientP = ClientProxy.getClient(companyService);
HTTPConduit http = (HTTPConduit) clientP.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
        //httpClientPolicy.setConnectionTimeout(20000);
        httpClientPolicy.setReceiveTimeout(5*60*1000);
        //httpClientPolicy.setAllowChunking(false);
        http.setClient(httpClientPolicy);
我设置了5分钟 ,可是服务端却在5分钟内还在运行,直到超时?

这是为什么呢?

我也不知道,我设置了之后感觉也没啥反映,所以我都改用httpclient做了,报文封装自己做
1 楼 tangduDream 2012-01-18  
我想问你一个问题,为什么我配置:
//超时设置
Client clientP = ClientProxy.getClient(companyService);
HTTPConduit http = (HTTPConduit) clientP.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
        //httpClientPolicy.setConnectionTimeout(20000);
        httpClientPolicy.setReceiveTimeout(5*60*1000);
        //httpClientPolicy.setAllowChunking(false);
        http.setClient(httpClientPolicy);
我设置了5分钟 ,可是服务端却在5分钟内还在运行,直到超时?

这是为什么呢?

相关推荐

    CXF客户端启动过程

    - CXF使用HTTP客户端来发送请求和接收响应。默认情况下,它使用Apache HttpClient,但也可以配置为使用其他HTTP客户端库。 - HTTP客户端的配置包括连接超时、重试策略、认证机制等,这些都可以通过CXF的客户端配置...

    cxf webService客户端

    Web服务客户端是调用远程Web服务的程序,它通过发送请求并接收响应与服务端进行交互。在CXF框架中,我们可以使用WS-I Basic Profile兼容的客户端API来实现这一功能。 创建CXF Web服务客户端的第一步是获取服务的...

    cxf webservice 文件分块上传

    根据提供的博文链接,我们可能无法直接获取具体细节,但可以推测讨论的内容可能涉及到以下方面:通过CXF Webservice接口设计一个能够接收并合并分块文件的系统。这个系统可能涉及到客户端将大文件分割成多个小块,...

    Spring+cxf请求webService

    因此,调用Web服务方法时,传入Java对象,CXF会将其转化为XML发送;接收到服务器响应后,再将XML转化为Java对象返回。 4. **实例代码分析** 下面是一个简单的Spring配置示例,用于创建CXF客户端: ```xml ...

    HrServiceClient.java

    1. **SOAP协议**:如果HrService是基于SOAP(简单对象访问协议)的Web服务,那么`HrServiceClient`可能会使用CXF来生成客户端代理,该代理能发送SOAP请求并接收响应。这通常涉及到WSDL(Web服务描述语言)文件,它是...

    java调用exchange web services

    3. **发送请求并接收响应**: 使用HTTP客户端(如Apache HttpClient)发送SOAP请求,并捕获返回的SOAP响应。确保处理任何网络或解析异常。 4. **解析响应**: 解析SOAP响应,提取所需的数据。这可能涉及使用JAXB或...

    httpclient手册

    理解`PoolingHttpClientConnectionManager`,设置连接池大小,超时和重试策略。 8. **异步请求**:HttpClient 4.4支持异步请求,允许在不阻塞主线程的情况下发送请求。了解如何使用`FutureCallback`和`...

    Dubbo面试及答案(上).pdf

    服务提供者端的设置有助于更好地理解服务性能,而消费者端的设置具有更高的优先级,能灵活控制调用超时。如果消费者端超时,服务端线程不会阻塞,但会产生警告。 【Dubbo注册中心】 Dubbo支持多种注册中心,包括:...

    Android使用KSOAP调用webservice返回自定义类

    它允许客户端发送消息到服务端,并接收服务端的回应,这些消息通常包含业务逻辑的数据和操作。 二、Android客户端设置 1. 引入库:在项目的build.gradle文件中添加KSOAP2依赖: ```groovy dependencies { ...

    客户端编程方式调用webservice

    这些类提供了调用服务端操作的接口,封装了底层的SOAP消息发送和接收。 3. **实例化客户端代理**:在Java代码中,我们需要创建代理类的实例,并可能设置一些配置,比如连接超时、HTTP头等。 4. **调用服务**:通过...

    HttpClient 4.1.3

    10. **拦截器**:HttpClient支持请求和响应拦截器,允许在请求发送前或响应接收后插入自定义逻辑,如添加额外的Header、修改请求内容等。 11. **性能优化**:HttpClient 4.1.3版本对性能进行了优化,例如连接池的...

    apache HttpClient jar包

    7. **自定义策略和拦截器**:HttpClient允许用户自定义请求和响应处理策略,比如超时策略、重试策略,还可以通过拦截器机制在请求发送前或响应接收后插入自定义逻辑。 8. **与其他库的集成**:HttpClient可以与许多...

    2021Java字节跳动面试题——面向字节_Dubbo(上).pdf

    2. **服务消费者端设置**:如果消费者端设置了超时时间,则以消费者端为准,具有更高的优先级。这种方式灵活性更强,但若消费者超时,服务端线程不会终止,只会产生警告。 ### Dubbo注册中心 Dubbo支持多种注册中心...

    android app webservice 交互

    3. **发送和接收数据**:通过HTTP发送请求,然后解析返回的SOAP响应。这可能涉及XML解析(如使用DOM或SAX解析器)。 4. **处理结果**:将接收到的数据转换为Android可使用的对象,然后更新UI或执行其他操作。 **五...

    调用web service

    例如,在Java中,可以使用Apache CXF或JAX-WS,而在.NET中,有Add Service Reference功能。 3. **实例化客户端**:创建服务代理对象,这是与远程Web服务交互的本地代表。 4. **调用服务方法**:通过客户端对象调用...

    Java ExcutorService优雅关闭方式解析

    它通过发送中断信号给正在运行的线程来实现这一点。然而,这并不保证所有线程都会立即停止,因为线程是否响应中断取决于其内部逻辑。 例如,在`ShutDownUtilsTest`类中,`canNotStopThread`方法中没有检查中断状态...

    WebServiceDelayClient:用于测试 WebServiceDelay 网络服务

    3. **发送请求**:客户端构造一个符合WebServiceDelay服务接口的请求,这可能涉及到创建XML消息并使用SOAP协议进行封装。 4. **接收响应**:客户端等待服务的响应,并记录响应时间。可能还会对返回的数据进行解析和...

Global site tag (gtag.js) - Google Analytics