실행 하는 데 시간 이 오래 걸리는 WCF 서비스가 있습니다. (이 질문에 대해서는 서비스 요청을 끊는 데 관심이 없습니다.)
그러나 클라이언트가 강제로 연결을 끊으면 클라이언트가 응답을받지 않더라도 WCF 서비스가 계속 실행되어 완료됩니다.
신뢰할 수있는 메시징 (여기에는 적용되지 않는 것 같음), 이중 채널 / 동작 (구현하거나 요구하지 않는 것)에 대한 정보를 찾았으며 서비스 요청을 "분리"하는 방법을 이해했습니다.
그러나 백그라운드 작업자의 CancellationPending 속성과 같은 "간단한"메서드가 없는지 궁금합니다. 그러면 서비스가 다음과 같이 보일 것입니다.
while (!WCFRequest.CancellationPending && !FinishedWithLongOperation) {
DoOnePartOfTheLongOperation();
}
그렇지 않은 경우이를 추가 할 방법이 있습니까? 또는 가혹한 예외 (예 : TheadInterruptedException)로 WCF 스레드를 걷어차나요?
서비스 자체는 완료된 작업 및보고에 대해 완전히 멱 등성을 갖도록 설계되었습니다.
WCF 서비스는 IIS 7에서 호스팅되며 관련이있을 수 있습니다.
IIS 에서 HTTP / HTTPS 끝점으로 호스팅 되는 WCF 서비스의 경우 여기에서 작동 하는 HttpResponse.IsClientConnected (TM)를 사용하고 있습니다.
참고 : 이는 연결 해제를 올바르게 감지하는 호스팅 서버 (예 : IIS)의 기능에 따라 다릅니다. 일반적으로 이들은 순서에 따라 분리되어야합니다. YMMV.
그러면 코드는 다음과 기능적으로 동일합니다.
while (!FinishedWithLongOperation) {
if (Connection.ClientConnectedStatus == ClientStatus.Disconnected) {
throw new Exception("Client definitely disconnected!");
}
DoOnePartOfTheLongOperation();
}
노트:
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다