`
大狐狸_Bigfox
  • 浏览: 9989 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Axis2-1.6.2 HTTPS/SSL非常慢,解决思路

阅读更多

最近有个项目需要由axis1.4升级到axis2-1.6.2,原因是由于axis1版本无法控制连接超时时间,只支持设置readtimeout.故需要升级。

实验环境如下: 
服务器是Windows 2008 R2 + IIS+ C#,SSL双向认证 
客户端是Windows 7 + Axis2-1.6.2

项目是基于HTTPS访问Web service,axis1连接正常,速度正常,升级到axis2后

,通过SSL调用服务时,建立连接的速度变得非常非常慢。,通常需要30s多。


然后考虑到需要跟踪源代码,下了各种源代码包。虽然在Axis2里找到了导致速度缓慢的代码,但那里的Axis2只是调用Httpclient的方法,没办法,只好再跟踪Httpclient的源代码,发现导致问题的代码又在Axiom中,继续跟踪Axiom的源代码,最后发现问题出在OutputStream.flush()上,SSL时,这个flush相当费时,因为Axis2调用Web service本质上还是向服务器POST一个请求,所以我怀疑要么Httpclient哪里出了问题要么Axis2哪里出了问题。同时在服务器端,我用Soapmonitor监控请求,发现速度缓慢的问题的确是出在客户端这边。 

最后研究了大量文章,如下方法可解决速度慢的问题: 

          //  If the SO_TIMEOUT of CONNECTION_TIMEOUT is set by dynamically the
        
 //  override the static config 
         Integer tempSoTimeoutProperty  = 
                (Integer) msgContext.getProperty(HTTPConstants.SO_TIMEOUT);
        Integer tempConnTimeoutProperty 
 = 
                (Integer) msgContext
                        .getProperty(HTTPConstants.CONNECTION_TIMEOUT);
        
 long  timeout  =  msgContext.getOptions().getTimeOutInMilliSeconds();

        
 if  (tempConnTimeoutProperty  !=   null  {
            
int connectionTimeout = tempConnTimeoutProperty.intValue();
            
// timeout for initial connection
            httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(connectionTimeout);
        }
   else   {
            
// set timeout in client
            if (timeout > 0{
                httpClient.getHttpConnectionManager().getParams().setConnectionTimeout((
int) timeout);
            }

        }
 

Axis2默认状态下设置了httpclient的超时为30000MS。而我用Httpclient写的客户端中并没有设置超时(因为参考的Httpclient网站的例子中也未设置超时)。问题似乎就处在这里,我在我写的Httpclient客户端中,添加了设置超时的代码:client.getHttpConnectionManager().getParams().setConnectionTimeout(30000),结果果然建立SSL连接时变得非常非常慢,如果将超时设置为0,那么速度恢复正常。 

因此,在调用Axis2写的客户端中设置options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, 0),那么SSL连接的速度会正常,而重用SESSION的作用似乎对提升速度并不明显。 
            但是以上解决方案又违背了axis1升级到axis2控制连接超时时间的初衷,故有去研究了相关文章,最后发现了个貌似是正确的解决方案,那就是去设置host。事实证明这个方法是正确的,不但连接正常了,而且可以正常控制连接超时时间。哈哈哈,终于解决了,痛苦的过程。

          host文件新增一行:   webservice 服务的IP地址即可。

猜测引起变慢的原因大概是域名反向解析引起的。吼吼,希望有大神给出解答。

分享到:
评论

相关推荐

    axis2-1.6.2

    1、axis2客户端下载地址:http://mirror.esocc.com/apache//axis/axis2/java/core/1.6.2/axis2-1.6.2-bin.zip; 2、下载解压在D:\Work_Program_Files目录;在D:\Work_Program_Files\axis2-1.6.2\bin目录有一个wsdl2...

    axis2-1.6.2.zip

    1、axis2客户端下载地址:http://mirror.esocc.com/apache//axis/axis2/java/core/1.6.2/axis2-1.6.2-bin.zip; 2、下载解压在D:\Work_Program_Files目录;在D:\Work_Program_Files\axis2-1.6.2\bin目录有一个wsdl2...

    Axis2-1.6.2-bin和Axis2-1.6.2-war

    我们主要关注两个版本的Axis2:Axis2-1.6.2-bin和Axis2-1.6.2-war。 1. **Axis2-1.6.2-bin** 这个版本的Axis2是一个二进制发行版,包含了运行和开发Web服务所需的所有库和工具。其主要内容包括: - **核心库**:...

    axis2-1.6.2-war.zip

    标题中的"axis2-1.6.2-war.zip"指的是Apache Axis2的1.6.2版本的Web服务部署包,以WAR(Web ARchive)格式打包。Apache Axis2是一个强大且灵活的Web服务引擎,它允许开发人员创建、部署和管理Web服务。这个版本的...

    Axis2-1.6.2

    标题 "Axis2-1.6.2" 指的是Apache Axis2的1.6.2版本,这是一个开源的Web服务引擎,专为构建高效、高性能的SOAP(Simple Object Access Protocol)服务而设计。SOAP是一种基于XML的协议,用于在Web上交换结构化的和...

    axis2-eclipse-codegen-plugin-1.6.2和axis2-eclipse-service-plugin-1.6.2

    标题中的"axis2-eclipse-codegen-plugin-1.6.2和axis2-eclipse-service-plugin-1.6.2"指的是两个与Apache Axis2相关的Eclipse插件:Axis2代码生成插件和Axis2服务插件,它们是版本1.6.2的。Apache Axis2是一个流行的...

    axis2-1.6.2-war+axis2-1.6.1-war+axis2-1.6.2-bin

    标题中的"axis2-1.6.2-war+axis2-1.6.1-war+axis2-1.6.2-bin"表明这是一个包含不同版本的Apache Axis2服务框架的集合。Axis2是Apache软件基金会开发的一个Web服务引擎,它主要用于创建和部署Web服务以及处理SOAP消息...

    axis2-eclipse-codegen-plugin-1.6.2.zip和axis2-eclipse-service-plugin-1.6.2.zip

    标题中的"axis2-eclipse-codegen-plugin-1.6.2.zip"和"axis2-eclipse-service-plugin-1.6.2.zip"是两个与Apache Axis2相关的Eclipse插件,用于简化Web服务的开发过程。Apache Axis2是Java平台上一个成熟的Web服务...

    axis2-1.6.2 所需最少的jar 包 亲测!!!

    版本 1.6.2 是 Axis2 的一个稳定版本,它在该框架的发展历程中扮演了重要的角色。 在 Web Service 开发中,Axis2 提供了一个灵活且高效的模型,支持 SOAP、WS-* 标准以及 RESTful API。这个标题 "axis2-1.6.2 所需...

    axis2-1.6.2-all完整包(源码发布版本包docs文档war包)下载.txt

    该下载包含axis2-1.6.2-bin.zip发布执行版、axis2-1.6.2-docs.zip文档包、axis2-1.6.2-src.zip源码包、axis2-1.6.2-war.zip项目包。

    axis2-1.6.2-war axis2-1.6.2-bin

    标题中的"axis2-1.6.2-war"和"axis2-1.6.2-bin"指的是Apache Axis2的不同版本发布形式,这两个是Apache Axis2 Web服务框架的两个核心组件,分别代表了Web应用程序(WAR)和二进制分发版。 Apache Axis2是Java世界中...

    axis2-1.6.2-bin

    标题“axis2-1.6.2-bin”指的是Apache Axis2的一个特定版本——1.6.2的二进制发布包。Apache Axis2是Web服务引擎,它专注于提供高性能、可扩展性和灵活性,用于构建和部署Web服务。这个版本(1.6.2)包含了运行和...

    eclipse-plugin-and-axis2-1.6.2

    配置java web service开发环境时,需要保证axis2的版本和axis2-eclipse插件的版本要一致,否者可能导致莫名其妙的编译错误。...内含:axis2-1.6.2-war.zip 和axis2-eclipsse-codegen-plugin-1.6.2.zip

    axis2-1.6.2的war包与bin包以及使用文档

    在axis2-1.6.2的war包中,包含了Axis2运行时环境的所有必要组件,如Servlet、JSP等,使得你可以直接将此war文件部署到支持Java EE的Web服务器(如Tomcat、Jetty)上,快速启动一个运行在HTTP服务器上的Axis2实例。...

    axis2 1.6.2 生产wsdl客户端代码

    bin目录中的`axis2-1.6.2/bin/axis2-client.bat`(Windows)或`axis2-1.6.2/bin/axis2-client.sh`(Linux/Mac)脚本可用于执行命令行操作。 2. **生成客户端代码**: 进入bin目录,然后运行以下命令,将`your_wSDL_...

    axis2-eclipse-codegen-plugin-1.6.2+axis2-eclipse-service-plugin-1.6.2

    总的来说,"axis2-eclipse-codegen-plugin-1.6.2+axis2-eclipse-service-plugin-1.6.2"的组合为Eclipse用户提供了一套完整的Web服务开发解决方案,从生成代码到部署服务,全程都在熟悉的开发环境中完成,极大地提升...

Global site tag (gtag.js) - Google Analytics