`

webService链接设置超时时间

阅读更多

网络链接超时笔记

 

HttpClient在使用中有两个超时时间,是一直接触和使用的,由于上次工作中使用httpClient造成了系统悲剧的情况,特地对它的两个超时时间进行了小小的测试,在这里记录下。

 

     测试版本为HttpClient——3.1

 

     一:连接超时:connectionTimeout

 

     1:指的是连接一个url的连接等待时间。

 

     2:设置方法为:

 

     public class TestHttpClientMain {

 /**
  * @param args
  */
 public static void main(String[] args) {
  HttpClient client = new HttpClient();

  HttpMethod method = new GetMethod(
    "http://test.com");
  client.getHttpConnectionManager().getParams()
    .setConnectionTimeout(3000);
  client.getHttpConnectionManager().getParams().setSoTimeout(3000);
  try {
   int statusCode = client.executeMethod(method);
   System.out.println(statusCode);

   byte[] responseBody = null;

   responseBody = method.getResponseBody();

   String result = new String(responseBody);

   System.out.println(result);

  } catch (HttpException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

 

 

     3:测试的时候,将url改为一个不存在的url:“http://test.com”

 

     4:超时时间3000ms过后,系统报出异常。

 

     org.apache.commons.httpclient.ConnectTimeoutException: The host did not accept the connection within timeout of 3000 ms

 at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:155)
 at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:125)
 at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
 at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
 at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
 at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)

 

 

     二:读取数据超时:soTimeout

 

     1:指的是连接上一个url,获取response的返回等待时间

 

     2:设置方法

 

     public class TestHttpClientMain {

 /**
  * @param args
  */
 public static void main(String[] args) {
  HttpClient client = new HttpClient();

  HttpMethod method = new GetMethod(
    "http://localhost:8080/firstTest.htm?method=test");
  client.getHttpConnectionManager().getParams()
    .setConnectionTimeout(3000);
  client.getHttpConnectionManager().getParams().setSoTimeout(2000);
  try {
   int statusCode = client.executeMethod(method);
   System.out.println(statusCode);

   byte[] responseBody = null;

   responseBody = method.getResponseBody();

   String result = new String(responseBody);

   System.out.println(result);

  } catch (HttpException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

 

 

     3:测试的时候的连接url为我本地开启的一个url,http://localhost:8080/firstTest.htm?method=test

 

     在我这个测试url里,当访问到这个链接时,线程sleep一段时间,来模拟返回response超时。

 

     @RequestMapping(params = "method=test") //<——②

    public String testMethod(ModelMap model) {
  try {
   Thread.sleep(3000);
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
        System.out.println("call testMethod method.");
        model.addAttribute("name", "test method");
  return "test";
    }

 

 

     4:将读取response返回超时时间设的时间比那个sleep时间短之后,运行程序给出异常:

 

      Java.NET.SocketTimeoutException: Read timed out

 at java.net.SocketInputStream.socketRead0(Native Method)
 at java.net.SocketInputStream.read(Unknown Source)
 at java.io.BufferedInputStream.fill(Unknown Source)
 at java.io.BufferedInputStream.read(Unknown Source)
 at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
 at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
 at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
 at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)
 at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)

 

 HttpClient 4 和 HttpClient 3 设置超时

 

HttpClient 4:

连接超时:

连接超时
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,60000);
// 或者
HttpConnectionParams.setConnectionTimeout(params,6000);

读取超时:

 
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,60000);
// 或者
HttpConnectionParams.setSoTimeout(params,60000);

HttpClient 3:

连接超时:

 
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);

读取超时:

httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000);

 

 

     ok,以后再写httpClient这两个超时时间一定要加上,不加就很可能悲剧的了

 

注:转载于:http://blog.csdn.net/xinying0424/article/details/36006383

分享到:
评论

相关推荐

    PB6,PB7,PB8,PB9,PB10,PB11调用WEBSERVICE,并解决超时问题

    解决这个问题通常涉及调整超时设置、优化服务性能、检查网络连接或采用重试策略等。 描述中提到的“AXIS2”是Apache软件基金会的一个开源Web服务框架,它用于部署和实现Web服务。AXIS2提供了高效的执行模型,支持...

    Java编程Webservice指定超时时间代码详解

    // 建立连接超时时间,单位为毫秒 context.put(BindingProviderProperties.REQUEST_TIMEOUT, 10000); // 获取响应超时时间,单位为毫秒 System.out.println("Response: " + response); } } 在Java中,Webservice...

    cxf超时设置

    "cxf超时设置"这个主题是关于如何在使用CXF框架时,对网络通信的超时时间进行配置,以优化服务的稳定性和性能。 首先,理解超时的概念至关重要。在计算机网络中,超时是指等待某个操作完成的时间限制。当这个时间...

    SpringBoot设置接口超时时间的方法

    SpringBoot 设置接口超时时间的方法 SpringBoot 是一个基于 Java 的开源框架,由 Pivotal 团队开发,旨在简化基于 Java 的企业级应用程序的开发。 在 SpringBoot 中,设置接口超时时间是非常重要的,因为它可以避免...

    Webservice远程调试及超时操作原理解析

    同时,也可以在IIS管理界面的"Default Web Site"中调整"Connection timeout",以改变连接超时时间。 总结起来,Webservice的远程调试和超时管理是确保服务稳定性和高效性的重要手段。正确配置这些参数,可以有效...

    python调用WEBSERVICE接口

    2. **超时时间**:根据实际网络情况调整`set_options()`中的超时时间,避免因网络问题导致的连接失败。 3. **编码问题**:确保所有操作都使用相同的字符集(例如UTF-8),以避免出现乱码或解码错误。 4. **错误处理*...

    eclipse中使用webservice远程服务 超详细教程

    - 修改生成的代码以适应实际需求,如添加错误处理逻辑、设置超时时间等。 #### 五、调用服务 1. **初始化客户端对象**: - 使用生成的客户端类初始化客户端对象。 - 设置必要的参数,如服务地址、方法参数等。 ...

    android 调用webservice 有源码+jar

    - 设置HTTP连接:创建HttpURLConnection实例,设置连接参数,如URL、请求方法、超时时间等。 - 发送请求:将SOAP请求写入HTTP连接的输出流。 - 处理响应:读取HTTP连接的输入流,解析返回的SOAP响应XML,提取所需...

    短信网关 对接 webservice

    1. **电子商务**:在用户完成购物后,通过Webservice接口发送订单确认短信,通知用户订单详情和预计送达时间。 2. **银行和金融**:当用户进行转账或支付操作时,通过短信提醒用户交易详情,增强安全性。 3. **教育...

    Webservice样例

    - **`timeout`**:设置请求超时时间为 30 秒。 - **`SERVICE_IP`**:服务端 IP 地址及端口号。 - **`URL`**:服务的完整 URL。 - **`NAMESPACE`**:命名空间,用于区分不同服务。 - **`webserviceName`**:要调用的...

    webservice调用终极解决方案_webservice_源码

    此外,性能优化也是调用Web Service时不可忽视的一环,例如,缓存重复请求的结果、批量处理请求、合理设置超时时间等。 文档在Web Service的使用中扮演着重要角色。"webservice调用终极解决方案.docx"很可能包含了...

    基于 AJAX和Webservice 的长轮询方式ServerPush技术模拟

    5. **优化超时和重试**:设置合适的超时时间,防止服务器资源过度消耗,同时在超时后客户端自动重试请求,确保连接的连续性。 通过以上步骤,我们可以在 VS2005 中利用 AJAX 和 Webservice 实现基于长轮询的 Server...

    webservice 服务调用工具类

    - 性能优化:合理设置请求超时时间,避免不必要的网络等待,同时考虑缓存策略以减少重复请求。 总的来说,"WebService服务调用工具类"是一个实用的开发工具,它提高了开发效率,降低了网络请求的复杂性,使得开发者...

    springcloud feign 服务消费者 类似 webservice

    2. 配置Feign的客户端,包括超时时间、连接池大小等。 3. 当服务提供者不可用或网络问题导致请求失败时,可以通过Hystrix进行回退处理。 4. 可以通过日志配置来追踪Feign的请求和响应,便于排查问题。 总之,Spring...

    VC++使用gsoap调用WebService接口

    可能需要调整gSOAP的配置选项,例如超时时间、重试策略等。 在"VC++使用gsoap调用webservice接口.rar"中,包含了示例程序,这将帮助你更好地理解实际操作流程。通过研究和运行这些示例,你可以快速掌握gSOAP在VC++ ...

    Android调用WebService接口实现火车时刻表

    此外,为了提供良好的用户体验,记得处理网络错误,比如无网络连接、超时或服务器错误等。还可以考虑使用缓存机制,当网络不稳定时,可以从本地加载之前查询过的数据。 总结一下,实现“Android调用WebService接口...

    web service第一次启动慢

    - 优化DNS解析:如果确认是DNS解析导致的延迟,可以使用DNS缓存服务或设置静态DNS条目来减少解析时间。 - 提高网络性能:确保网络带宽和连接质量能够满足web service的需求,特别是在高负载或远程连接的场景中。 -...

    基于Dubbo+Zookeeper实现webservice

    - **配置中心**:除了服务信息,还可以存储其他配置,如超时时间、重试次数等,便于集中管理和动态更新。 **3. WebService与Dubbo的结合** 传统的Web服务多采用SOAP协议,而Dubbo则基于更轻量级的RPC协议。不过,...

    webservice测试调用工具

    - 调整服务器配置,例如Tomcat的连接池大小、超时设置等,提升服务性能。 - 对返回的数据进行压缩,减少网络传输开销。 - 通过日志监控,定位可能出现的问题。 7. **总结** WebService测试调用工具,如...

    Android使用Soap库连接ASP.NET WebService客户端

    可能需要设置超时时间和其他HTTP头: ```java HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); androidHttpTransport.debug = true; // 开启调试模式,以便查看发送和接收的SOAP消息 ``` 5. **...

Global site tag (gtag.js) - Google Analytics