解析Axis客户端响应速度慢

在 Axis 客户端调用 Jax-ws 服务时遇到响应速度极慢的问题,通常只需几毫秒的响应在实际中却长达1-2分钟。通过分析发现,Jax-ws 使用 keep-alive 连接,而 Axis 客户端未能正确处理。解决方案是引入 Apache HttpClient 并修改 Axis 的 HTTP 传输处理,通过配置文件 client-config.wsdd 指定 CommonsHTTPSender,或者直接在代码中设置。这样可以解决连接处理问题,提高响应速度。
摘要由CSDN通过智能技术生成

使用Axis框架编写WebService客户端时,如果服务端是Axis,响应速度很快。但当服务端使用Jax-ws框架时,客户端响应速度极慢。

问题

在某项目实践过程中,使用了JDK6自带的Jax-ws框架来编写Web Service服务端。但是在现场与第三方调试时,对方反馈服务端很久没有响应,一般要1-2分钟甚至更长时间才能正常返回。

于是使用SoapUI模拟客户端进行测试,发现响应可以在几毫秒内返回。根据经验,Axis编写的客户端调用Axis编写的服务端时,也不会出现上述问题。

到底是什么原因导致Axis客户端响应慢得出奇呢?

方案

首先利用抓包工具在客户端和服务端分别抓取HTTP通信包(抓包过程略)。分析抓包日志可以看出,服务端很快就返回了响应,客户端也收到了响应消息。但是这个消息却由axis处理,没有送到axis客户端的应用层。

进一步比较axis服务端和jax-ws服务端的响应包发现,axis服务端会在发送响应消息时关闭http连接,而jax-ws为了增加连接重用,返回的http头中,连接信息描述如下:

connection: keep-alive

很显然,axis客户端没有正确处理这一消息,认为http连接如果没有关闭就会继续等待后续数据包。

apache提供了自己的解决方案。即:用他的 httpclient包来管理http连接。用org.apache.axis.transport.http.CommonsHTTPSender来代替org.apache.axis.transport.http.HTTPSender。具体用法如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值