Axis Web服务挂起,因为未返回connection-close

时间:2009-10-26 10:49:12

标签: java php web-services apache axis

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


Connection: close
生产环境中缺少

。我的假设是这就是代码执行挂起的原因,因为Axis期望连接关闭头字段。

我可以通过配置客户端来解决这个问题吗?如果没有,那么任何关于配置Apache + PHP以正确关闭连接的提示都会受到赞赏。

2 个答案:

答案 0 :(得分:4)

尝试在应用程序中设置-Dhttp.keepAlive = false系统属性,如果可以在应用程序的其他部分禁用保持活动。这将阻止java-internal 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)      - 已锁定< 0xab82fa30> (一个java.io.BufferedInputStream)     在sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)     在sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)      - 已锁定< 0xab82c838> (a sun.net.www.protocol.http.HttpURLConnection)

http.keepAlive设置基本上确保HttpClient始终按照HeavyWave的建议发送'connection:close'。

答案 1 :(得分:2)

您可以尝试使用您的请求发送Http Header“Connection:close”。