关于AXIS客户端响应速度慢的问题总结
来源:互联网 发布:域名可以自建吗 编辑:程序博客网 时间:2024/04/28 14:45
解决这个问题可以用两种方式:
一、代码里面指定所使用的连接
1. 使用http1.1。 默认情况下,axis1.4使用的transport handler是HttpSender,这个类默认使用http1.0作为它的传输标准。而http1.0是不提供persistent connection(keep-alive)模式的,这样每次call都会建立一次新的连接,尤其是对于ssl的连接来说,这个开销就有点霸道了。http11的标准提供了keep-alive机制,把axis的transport升级成http11能节约不必要的连接建立开销。具体做法有:
(1)调用client call(org.apache.axis.client.Call)来setProperty(MessageContext.HTTP_TRANSPORT_VERSION, HTTPConstants.HEADER_PROTOCOL_11);
(2)把transport handler改成Jakarta的CommonsHTTPSender。这个需要设置axis engine使其来使用CommonsHTTPSender,在初始化axis.client.Service之前set engine configuration(因为在初始化Service的时候axis回去加载engine configuration)。AxisProperties.setProperty(EngineConfigurationFactory.SYSTEM_PROPERTY_NAME, "com.test.CustomerEngineConfiguraiontFactory"),这样写的目的是告诉axis去使用我们自己定义的factory。 这个CustomerEngineConfiguraiontFactory实现了axis的EngineConfigurationFactory接口,在这个接口实现类里面set了engine configuration。一个简单的实现如下:
public EngineConfiguration getClientEngineConfig() {
SimpleProvider engineProvider = new SimpleProvider ();
engineProvider.deployTransport(HTTPTransport.DEFAULT_TRANSPORT_NAME
, new CommonsHTTPSender());
return engineProvider;
}
2. 压缩传输数据。 这个需要在设置了transport为http11后才能使用。用axis.client.Call去set相应的property:
call.setProperty(HTTPConstants.MC_GZIP_REQUEST, Boolean.TRUE);
call.setProperty(HTTPConstants.MC_ACCEPT_GZIP, Boolean.TRUE);
可以参考这里,http://www.pocketsoap.com/weblog/2005/10/1565.html
---------------------------------------------------------------------------------------------------上面是写在代码里面的:
二、配置文件指定使用的连接
1、 引入三个jar包,commons-codec.jar,commons-httpclient.jar,commons-collections.jar
2、 增加配置文件client-config.wsdd,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultClientConfig"
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<transport name="http"
pivot="java:org.apache.axis.transport.http.CommonsHTTPSender"/>
<transport name="local"
pivot="java:org.apache.axis.transport.local.LocalSender"/>
<transport name="java"
pivot="java:org.apache.axis.transport.java.JavaSender"/>
</deployment>
3、 在axis自动生成的代理类XXProxy中,修改init方法(下面的例子表示调用kaopuUpSoap服务):
private void _initKaopuUpSoapProxy(){
try {
EngineConfiguration conf = new FileProvider(this.getClass().getResourceAsStream("/client-config.wsdd"));
kaopuUpSoap = (newcom.zte.iups.wbs.up.wsdl.KaopuUpServiceLocator(conf)).getkaopuUpSoapPort();
即:在生成代理类时,传入配置文件参数进行初始化。
通过上述三个步骤修改后的axis客户端,不管调用哪种Web Service服务端,都能在极短时间内返回响应。问题得以解决。
- 关于AXIS客户端响应速度慢的问题总结
- 解析Axis客户端响应速度慢
- 关于windows 2003 + tomcat7.0响应速度慢的问题
- mysql客户端登陆服务器速度奇慢的问题
- 网易的响应速度变慢了
- 关于jdk1.5连接oracle速度慢的问题
- 关于使用struts2上传大文件速度慢的问题
- 关于Myeclipse启动速度太慢的问题
- 关于android sdk manager速度慢的问题
- ssh 速度慢的问题
- phonegap开发 使用jQuery mobile 导航栏响应速度慢的问题
- 关于AutoCAD启动速度慢的分析
- 关于电脑运行速度慢的解决办法
- 部署在本机的Tomcat响应速度慢!
- Oracle查询速度慢的原因总结
- Oracle查询速度慢的原因总结
- summary 速度很慢的问题
- 彻底解决南北互访速度慢的问题
- 逆波兰式
- 某业务系统由于连接数限制导致间歇性访问慢故障分析案例
- 基于qt的多线程视频采集与传输
- MyEclipse调试小技巧
- Cocos2d Particle Builder粒子编辑器。
- 关于AXIS客户端响应速度慢的问题总结
- makefile 中调用shell脚本注意事项
- android之文件上传
- barcode4j主页
- XAMPP在Win2003下配置
- Java WeakReference 和 SoftReference .
- 好的程序员应该掌握的几门编程语言
- 三言两语谈团队合作
- 读取NSBundle下自己新建的文件夹下面的所有文件