많은 스마트 클라이언트에 대해 단방향 파일 동기화를 수행하는 매우 간단한 WCF 서비스가 있습니다. 나는 통화 도중 네트워크 또는 서비스 중단이있을 때 클라이언트가 전체 응용 프로그램이 다시 시작될 때까지 서버와 통신 할 수 없게된다는 것을 알고 있습니다.WCF 클라이언트가 서비스 중단시 중단됨
서비스는 BasicHttpBinding
으로 실행되며 transferMode="Streamed"
및 messageEncoding="Mtom"
을 사용하여 IIS6 (.svc 페이지)에서 호스팅됩니다. 이 서비스는 기본 InstanceContextMode (필자는 Per Per Call?) 및 ConcurrencyMode = Single을 사용하도록 구성되어 있습니다. 기본 스로틀 링 동작을 사용하고 있지만 다른 어느 누구도 공격하지 않는 격리 된 테스트 환경에 있습니다.
클라이언트는 Windows 서비스입니다. 이 ServiceProxyHelper을 사용하여 연결이 Close()
'또는 Abort()
'd 일 때 올바르게 표시합니다. Dispose()
'd 일 때 세션이 없으므로 문제가 아닌 것으로 생각합니다. 오류가 발생하면 Client 개체가 삭제 된 다음 범위를 벗어납니다. 예외가 감지되면 서비스는 조금 기다린 다음 새 클라이언트 객체를 만들고 다시 시도합니다. 따라서 장애로부터 복구해야하지만 어떤 이유로 서비스에 대한 모든 후속 호출이 실패합니다.
클라이언트를 시작하여 파일을 몇 개 전송 한 다음 서버를 다시 설정하여이 파일을 안정적으로 재현 할 수 있습니다. 먼저 클라이언트는 일반적으로 "서비스가 너무 바쁩니다"라는 오류 (응용 프로그램을 다시 시작하는 동안 발생하는 IIS 503 오류에 매핑 됨)를 표시합니다. 그 후에는 서비스에 대한 이후의 모든 호출이 시간 초과됩니다. 내가 알 수있는 한, 전화가 클라이언트에 의해 시도조차되지 않는다. 추적 기능을 사용할 수 있으며 표시되는 내용은 다음과 같습니다. 시간 초과 오류, "HTTP를 통해 요청 메시지를 보내지 못했습니다."경고, 다른 제한 시간 오류.
미친 문제는 app.config에서 Fiddler (포트 8888)를 프록시로 사용하도록 클라이언트를 구성하면 모든 것이 원하는대로 작동한다는 것입니다. 그래서 Fiddler가 프록시로서 WCF 자체가 아닌 일종의 연결을 닫거나 마무리하는 것입니다.
생각하십니까?
편집 2009-10-30 8:54 PM : 서비스 속성이 다음과 같이 변경되었습니다. InstanceContextMode = Single 및 ConcurrencyMode = Multiple. 차이 없음.
100 Continue 기능과 관련된'WebRequest'에 알려진 버그가 있습니다. http://regis.decamps.info/blog/2010/12/c-bug-in-webrequest/ – rds