java - Axis Web 服务挂起,因为未返回连接关闭

标签 java php web-services apache-axis

我有一个使用 PHP Web 服务(在 Apache 上运行)的 Axis 1.4(带有 Spring)Web 服务客户端。这在开发环境中工作得很好,但在生产环境中,代码执行在客户端收到 SOAP 响应后直接卡在 Axis 库中的某个地方。我已经确定了 Wireshark,从客户端的角度来看,唯一的区别是在开发环境中,SOAP 响应的 HTTP header 包含条目


Connection: close

生产环境中缺少。我的假设是这就是代码执行挂起的原因,因为 Axis 需要连接关闭 header 字段。

我可以通过配置客户端来解决这个问题吗?如果没有,请提供有关配置 Apache + PHP 以正确关闭连接的任何提示。

最佳答案

尝试在您的应用程序中设置 -Dhttp.keepAlive=false 系统属性,如果可以在应用程序的其他部分禁用保持 Activity 。这将防止 java 内部 HttpClient 类尝试从打开的连接急切地填充 BufferedInputStream 时发生某些挂起。

有关详细信息,另请参阅 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4479751 .

如果这有机会帮助您查看挂起客户端的堆栈跟踪,它应该如下所示:

java.lang.Thread.State: 可运行 在 java.net.SocketInputStream.socketRead0( native 方法) 在 java.net.SocketInputStream.read(SocketInputStream.java:129) 在 java.io.BufferedInputStream.fill(BufferedInputStream.java:218) 在 java.io.BufferedInputStream.read1(BufferedInputStream.java:258) 在 java.io.BufferedInputStream.read(BufferedInputStream.java:317) - 锁定 <0xab82fa30>(java.io.BufferedInputStream) 在 sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687) 在 sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632) 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072) - 锁定 <0xab82c838>(一个 sun.net.www.protocol.http.HttpURLConnection)

http.keepAlive 设置实质上确保 HttpClient 将始终按照 HeavyWave 的建议发送“连接:关闭”。

关于java - Axis Web 服务挂起,因为未返回连接关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1624159/

相关文章:

java - 网络服务 : Request-Response Mapper

java - GCM 可以用作双向通信吗?

java - 如何从 SWT 中的表中删除 CCombo

java - 如何使用 Java 脚本将 docID 从一个 NotesDocument 添加到另一个 NotesDocument

php - VS Code PHP 格式化程序 Intelephense

web-services - 获取SSL证书以与Payara 4.1一起使用

javascript - 是否有请求限制较高的免费 Javascript 推送服务?

java - Intellij IDEA JavaFX Scene Builder 与应用程序其余部分的分辨率不同

php - Laravel multiauth md5 和主键字符串

php - 在 macOS 上安装 Composer 时出错(JIT 编译失败)