我正在编写一个实现which的独立应用程序,该应用程序的端点是使用嵌入的Sun HttpServer发布的。我对此有一个奇怪的问题,在特定的部署情况下,在服务器处理/sending应答和接收应答的客户端之间存在明显的延迟。
让我举几个例子:
案例1)工作:服务器在Eclipse中运行,它使用OpenJDK 1.6.0_23作为运行时。客户端是用axis实现的(不是axis2!)并且运行在JBoss内部的Solaris JBoss(必须承认我不知道确切的Java版本,但我怀疑是Java 5版本)。
案例2)工作:服务器运行在Solaris x86上,使用java 1.6.0_26,客户端使用OpenJDK 1.6.0_23在Eclipse中运行。
例3)无法工作:服务器运行在带有java 1.6.0_26的Solaris 1.6.0_26上,客户端运行在Solaris x86上,轴在Solaris x86上(同样,怀疑是Java 5,而不是6)。
我想知道我是否会患上下面的Java,它是用1.6.0_30修复的(假设OpenJDK 1.6.0_xx没有遭受相同的bug)?
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7068416
但如果是这样的话,为什么第二种情况会起作用呢?客户端能以某种方式控制服务器端的TCP_NODELAY吗?
关于我观察到的确切延迟:我有两个web服务,发布在不同的上下文中。例2不同的WSDL。客户端(显然)对每个服务都有单独的(轴1)绑定。对于一个服务,我看到一致的延迟正是150秒,而对于另一个服务,延迟始终是300秒。这些价值观对任何人都有影响吗?
马腾
编辑我现在倾向于Eclipse Generated Web Service Client Extremely Slow的原因和解决方案。现在无法测试,因为我坐在酒店的房间里,没有系统。
发布于 2011-12-19 08:37:02
好的,通过告诉Axis使用CommonsHttpSender而不是默认的HttpSender来解决这个问题。由于相关应用程序已经在其WEB/lib目录中拥有了必要的jars,所以这并不是什么大问题。
要使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的实现)中有些东西不喜欢HTTP/1.1对HTTP/1.0请求的响应。
马腾
https://stackoverflow.com/questions/8553591
复制相似问题