我正在编写一个实现Web服务的独立应用程序,使用嵌入式Sun HttpServer为其发布Endpoint。我有一个奇怪的问题,在特定的部署情况下,服务器处理/发送回复和客户端接收回复之间存在明显的延迟。 / p>
让我举几个场景:
案例1)工作:服务器在Eclipse中运行,它使用OpenJDK 1.6.0_23作为运行时。客户端是用axis(而不是axis2!)实现的,并且在JBoss内的Solaris x86上运行(必须承认我不知道使用的确切Java版本,但我怀疑是Java 5版本。)
案例2)工作:服务器在带有java 1.6.0_26的Solaris x86上运行,客户端在Eclipse中运行,带有OpenJDK 1.6.0_23。
案例3)不工作:服务器在Solaris x86上使用java 1.6.0_26运行,客户端在Solaris x86上,轴在Solaris x86上(再次,怀疑它是Java 5,而不是6)。
我想知道我是否会遇到以下Java错误,这个错误在1.6.0_30中得到修复(假设OpenJDK 1.6.0_xx没有遭受同样的错误)?
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7068416
但如果是这样的话,为什么案例2会起作用呢? 客户端可以某种方式控制服务器端的TCP_NODELAY吗?
关于我观察到的确切延迟:我有2个Web服务,在不同的上下文中发布。例如2个不同的WSDL。客户端(显然)为每个服务分离(轴1)绑定。对于一项服务,我看到恰好150秒的一致延迟,对于其他服务,延迟始终为300秒。这些价值观会给任何人敲响一声吗?
马腾
修改 我现在倾向于Eclipse Generated Web Service Client Extremely Slow中的原因和解决方案。当我坐在酒店房间而无法访问系统时,无法进行测试。
答案 0 :(得分:0)
好的,设法通过告诉Axis使用CommonsHttpSender而不是默认的HttpSender来解决这个问题。由于相关应用程序已经在其WEB-INF / lib目录中具有必备的先决条件罐,因此这不是什么大问题。
要让Axis(1.4)使用CommonsHttpSender,请在以下位置创建一个“client-config.wsdd”文件(注意:这是一个非常明显的部分,这让我感到非常头痛):
MY.ear/MY.war/WEB-INF/classes/org/apache/axis/client/client-config.wsdd
具有以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<deployment
name="commonsHTTPConfig"
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- use CommonsHTTPSender instead of the default HTTPSender -->
<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>
重新启动您的应用程序。在此更改之后,Axis将使用HTTP / 1.1进行Web服务调用,这似乎是纠正这种令人讨厌的延迟所需的全部内容。似乎HTTP协议规范(或者可能是Axis的实现)中存在 something ,它们不喜欢对HTTP / 1.0请求的HTTP / 1.1响应。
马腾