2009-08-06 4 views
0

내 응용 프로그램에 50 개의 서비스 끝점 (예 : /mysite/myService.svc)이 있습니다. 그것은 IIS에서 호스팅됩니다. 간헐적으로 (2 ~ 3 일에 1 회) 서비스가 응답을 멈 춥니 다. 결코 동일한 서비스가 아닙니다. 서비스가 중단 된 동안 다른 서비스 중 일부는 정상적으로 작동하고 일부 서비스는 중단됩니다.WCF 서비스가 중지되고 클라이언트가 ServiceModel.CommunicationException을 수신합니다.

ServiceModel.CommunicationException 

Message: An error occurred while receiving the HTTP response to 
https://server/mysite/myservice1.svc. 

This could be due to the service endpoint binding not using the HTTP 
protocol. This could also be due to an HTTP request context being 
aborted by the server (possibly due to the service shutting down). 
See server logs for more details. 

없음 예외가 클라이언트가 걸려 서비스를 호출하려고 서버가 제기되지 않은 :

모든 클라이언트 (다른 ​​컴퓨터에서)이 오류가 발생합니다. 내가 가진 것은 클라이언트 측에서 그 오류입니다.

문제를 해결하려면 응용 프로그램 풀을 수동으로 재활용해야합니다.

원인을 알 수 있습니까? 이 문제를 어떻게 조사 할 수 있습니까? 나는 서비스가 중단되었을 때 작업자 프로세스의 메모리 덤프를 기꺼이 가져 가고 싶지만 덤프에서 무엇을 검색해야하는지 알지 못한다.

업데이트 (2009 년 8 월 13 일) : 나는 서버의 연결이 끊어 졌다는 생각을 거의 배제했다. (Shiraz Bhaiji의 대답 참조). 나는 새로운 단서를 가지고 있을지도 모릅니다. 모든 서버 측 예외를 로그 파일에 기록합니다. 따라서 이론적으로 클라이언트에서 발생하면 서버에서 예외가 발생하지 않습니다. 그렇지 않으면 내 기록에 그 증거가있을거야. 하지만 서버에서 오류가 발생하지만 예외가 예외 처리 코드로 라우팅되지 않는 낮은 수준에서 발생하는 경우 어떻게해야합니까? 낮은 수준의 예외를 처리 할 수없는 시나리오에 대해서는 this question 게시했습니다. 수사 진행 상황을 알려 드리겠습니다.

답변

1

이 문제를 해결하기 위해 바인딩에서 establishSecurityContext를 False로 설정했습니다.

0

나는이 특별한 문제에 대해 알지 못했지만 서비스 및/또는 클라이언트 응용 프로그램에 대한 구성에서 WCF 서비스에 대한 추적/메시지 로깅을 설정하도록 제안합니다 (제어 권한이있는 경우). 지난 며칠 동안 문제 해결에 필요한 서비스를 제공했습니다.

MSDN 링크 here은 좋은 출발점입니다.

구성 할 수있는 다양한 수준의 추적 세부 사항에 대해서는 this 게시물의 표를 참조하십시오. 예외 만 기록에서 전체 메시지 세부 정보로 이동할 수있는 여러 수준이 있습니다. 이것을 app.config 파일에 설정하는 것은 매우 빠릅니다.

로그 파일 출력을 구문 분석하려면 Windows SDK와 함께 제공되는 SvcTraceViewer.exe를 사용하십시오. 설치 한 경우이 폴더에 있어야합니다. C : \ Program Files \ Microsoft SDKs \ Windows \ v6.0 \ 빈

1

연결이 끊어져있는 것처럼 들리겠습니다.

기본적으로 WCF는 시간 초과가 있으므로 10 분 동안 연결을 유지합니다.

응용 프로그램 풀을 재활용하면 모든 연결이 닫히고 다시 작동합니다.

코드를 확인하여 연결을 닫거나 프록시를 처리하는지 확인하십시오.

+0

클라이언트는 연결을 닫습니다 (우리는 클라이언트 응용 프로그램을 제어합니다). 그러나 그것은 좋은 점입니다. 예를 들어 클라이언트 응용 프로그램이 충돌 (또는 종료)되면 프록시를 닫을 기회가 없을 수 있습니다.하지만이 경우 최대 연결 수에 도달하면 서버에서 오류가 발생하지 않습니까? – Sylvain

+0

서버에서 receiveTimeout을 낮추려고합니다. 타임 아웃이 시작되면 클라이언트가 프록시를 종료하는 방식에 문제가 있음을 나타냅니다. – Sylvain

+0

나는 receiveTimeout을 낮췄다. 그것은 아무것도 바뀌지 않았습니다. 나는 연결이 끊어 졌다는 생각을 배제하려고합니다. 제어 된 환경에서 테스트를 수행했습니다. 서버 연결이 끊어지면 클라이언트가받는 오류는 프로덕션 환경에서 가져온 것과 같은 CommunicationException이 아닌 TimoutException입니다. 그래서 나는 그것이 다른 것이라고 생각합니다. – Sylvain

관련 문제