2010-02-07 9 views
3

Sun 경량 http 서버에 웹 서비스 엔드 포인트를 게시했습니다. 서버가 연결 (Executors.newCachedThreadPool())에 대한 ThreadPool 실행 프로그램으로 실행 중입니다. 일반 웹 서비스 클라이언트 (JAX-WS)도 사용하고 있습니다.JAX-WS 시간 초과 문제

5 분을 초과하는 모든 호출에 대해 서버 (또는 클라이언트)는 현재 호출 스레드를 종료하고 새 호출 스레드를 엽니 다. 서버에서 새 연결이 설정되었고 동일한 작업을 실행하려고하는 것처럼 보입니다.

"두 번째 전화"가 5 분을 초과 할 수 있다는 것을 의미하는 한 번만 발생합니다.

연결에 대한 기본 시간 제한이 있습니까? 그것을 구성하는 방법이 있습니까?

답변

0

실제로 저는 파스칼이 제공 한 정보를 사용하여 해킹을 찾을 수있었습니다 (감사합니다!). 시스템 등록 정보 -sun.net.httpserver.idleInterval을 설정하여 http 서버의 유휴 시간을 무시할 수 있습니다.

1

나는 이것이 클라이언트 측의 문제라고 생각한다. (단, Pascal의 답을 확인하라.) 클라이언트는 정의 된 시간 초과 값을 가지며 너무 오랜 시간이 걸리는 작업에 대해 손해를 보게됩니다.

HttpClient에서 연결 시간 초과를 정의하고 읽기 시간 초과를 별도로 정의 할 수 있습니다 (the configuration guide 참조).

이 방법을 사용하는 데 5 분 이상이 걸리면이 작업을보다 짧은 시간 내에 수행하는보다 개별적인 작업으로 나누는 방법을 살펴볼 것입니다. 또는 백그라운드에서 처리를 수행하고 클라이언트에게 나중에 연결을 유지하지 않고 결과를 수신 할 수있는 티켓을 제공하십시오.

또는, 무한 제한 시간을 설정 할 수 있지만 클라이언트가 이상적으로 서버 인해 문제에 응답하지 않을 경우 식별 할 수/잘못된 등

을해야하기 때문에 나는이 권하고 싶지 않다
+0

사용중인 웹 서비스 클라이언트에 대한 시간 초과 속성을 정의 할 수도 있습니다. Map requestContext = bp.getRequestContext(); \t \t \t \t requestContext.put (JAXWSProperties.CONNECT_TIMEOUT, ); requestContext.put (JAXWSProperties.REQUEST_TIMEOUT, ); 그러나 이것은 도움이되지 않았습니다. – Tal

+0

@Brian 사실 이것은 클라이언트 측 문제가 아닙니다. –

+0

@Pascal - (아직 제공된 링크를 보지 않았습니다). 부두가 유휴 연결에서 유사한 방식으로 보석을 신청하지 않는다는 것을 알고 있습니까? 내가 적절한 대답을 편집했음을 주목하라. (!)하지만 5 분 동안은 클라이언트 타임 아웃 문제가 생겨날 것이라고 생각한다. 따라서 나는 그것을 삭제하지 않았다. –

5

가벼운 http 서버의 경우 연결이 5 백만 후에 유휴 상태가됩니다. 구현 (ServerImplServerConfig에서 보임)은 유휴 연결을 닫고 현재이 유휴 시간 제한을 설정하는 공용 속성이 없습니다. 이런 종류의 제어를 원할 경우 서블릿 컨테이너를 사용할 수 있습니다. 또는 Jetty (which provides a SPI) instead of Sun default HttpServer을 사용할 수도 있습니다.