2009-10-26 2 views
1

나는 (Apache에서 실행되는) PHP 웹 서비스를 사용하는 Axis 1.4 (Spring 포함) 웹 서비스 클라이언트를 보유하고 있습니다. 이것은 개발 환경에서 완벽하게 작동하지만 프로덕션 환경에서는 클라이언트가 SOAP 응답을받은 직후 코드 실행이 Axis 라이브러리의 어딘가에 중단됩니다. 나는 클라이언트의 관점에서 유일한 차이점은 개발 환경에서 SOAP 응답의 HTTP 헤더는 프로덕션 환경에서 누락 된 항목연결 닫기가 반환되지 않기 때문에 Axis 웹 서비스가 중단됩니다.


Connection: close 

가 포함되어 있음을 Wireshark와 함께 확인했다. Axis에서 연결 닫기 머리글 필드가 필요하기 때문에 코드 실행이 중단되는 이유라고 가정합니다.

클라이언트를 구성하여이를 해결할 수있는 방법이 있습니까? 그렇지 않다면 아파치 + PHP가 올바르게 연결을 닫도록 설정하기위한 힌트가 필요하다.

답변

4

응용 프로그램의 다른 부분에서 활성 상태를 유지할 수 있으면 응용 프로그램에서 -Dhttp.keepAlive = false 시스템 속성을 설정해보십시오. 이렇게하면 열려있는 연결에서 BufferedInputStream을 열심히 채우려 고 시도하는 java 내부 HttpClient 클래스에서의 특정 정지를 방지 할 수 있습니다.

자세한 내용은 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4479751을 참조하십시오. 이것은 당신이 당신의 매달려 클라이언트의 스택 트레이스를 보라 돕는 기회가있는 경우

, 그것은 다음과 같아야합니다

하는 java.lang.Thread.State을 : java.net.SocketInputStream에서 RUNNABLE .socketRead0 (네이티브 메소드) at java.net.SocketInputStream.read (SocketInputStream.java:129) at java.io.BufferedInputStream.fill (BufferedInputStream.java:218) at java.io.BufferedInputStream.read1 (BufferedInputStream. java : 258) at java.io.BufferedInputStream.read (BufferedInputStream.java:317) - 잠김 < 0xab82fa30> (a java.io.BufferedInputStream) at sun.net.www.http.HttpClient.parseHTTPHeader (HttpClient.java:687) at 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에서 제안했습니다.

2

귀하의 요청에 따라 HTTP 헤더 "연결 : 닫기"를 보내보십시오.