【问题标题】:Axis web service hangs because no connection-close is returnedAxis Web 服务挂起,因为没有返回连接关闭
【发布时间】:2009-10-26 10:49:11
【问题描述】:

我有一个使用 PHP Web 服务(在 Apache 上运行)的 Axis 1.4(带有 Spring)Web 服务客户端。这在开发环境中完美运行,但在生产环境中,代码执行在客户端收到 SOAP 响应后直接挂在 Axis 库中的某个位置。我已经通过 Wireshark 确定,从客户端的角度来看,唯一的区别是在开发环境中,SOAP 响应的 HTTP 标头包含条目


Connection: close

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

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

【问题讨论】:

    标签: java php web-services apache axis


    【解决方案1】:

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

    详情请见http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4479751

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

    java.lang.Thread.State: RUNNABLE 在 java.net.SocketInputStream.socketRead0(本机方法) 在 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) - 锁定 (一个 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) - 锁定 (一个 sun.net.www.protocol.http.HttpURLConnection)

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

    【讨论】:

      【解决方案2】:

      您可以尝试在请求中发送 Http Header "Connection: close"。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-04
        • 1970-01-01
        • 1970-01-01
        • 2011-09-13
        • 2010-12-19
        • 1970-01-01
        • 2011-12-14
        相关资源
        最近更新 更多