2013-05-21 5 views
1

Windows 2008에서 MSMQ를 사용 중입니다. 개인 큐에서 메시지를 사용할 수 있습니다. Windows 서비스로 설치된 WCF 가입자 한 명 (C#으로 작성)이 있습니다. 이제 문제는 때때로 WCF 가입자가 Queue에서 메시지를 선택하지 않는다는 것입니다. 다시 서비스를 다시 시작하면 정상적으로 작동합니다. 이제 IError 처리기를 연결하여 이유와 예외를 기록합니다.오류가 발생하면 창 서비스를 다시 시작하는 방법

지금 내가 원하는 것은이 문제를 처리하기 위해서입니다. 먼저 오류가 발생하면 서비스를 다시 시작하도록 복구 속성을 설정합니다. 이제는 메서드가 IErrorHandler class 인 오류를 어떻게 던질 수 있습니까?

윈도우 서비스에 예외를 발생시켜 다시 시작할 수있는 가장 좋은 방법을 알려주십시오.

+0

먼저 서비스가 메시지 선택을 중단하는 이유를 알아야합니다. 이것이 문제입니다. 어쩌면이 상황을 설명하고 그것에 대해 물어봐야할까요? –

+0

@ TadasŠukys- 나는 갑자기 그 queue.still에서 메시지를 따기 중지 이유를 모르겠다. 창문 서비스를 중지하고 갈 때 오류가 발생하고 창 로그 오류가 발생합니다 : 서비스를 중지하지 못했습니다. System.ServiceModel.CommunicationObjectFaultedException : 통신 개체 인 System.ServiceModel.ServiceHost는 오류 상태이므로 통신에 사용할 수 없습니다. at System.ServiceModel.Channels.CommunicationObject.Close (TimeSpan 제한 시간) Microsoft.Samples.MSMQToWCF.SubscriberWindowsService.OnStop() (d : \ SubscriberWindowsService) – samash

+0

@samash 참조 http://stackoverflow.com/questions/4197036/what - 적절한 - 방법 - 위해 - 창 - 서비스 - 투 - 실패 – stuartd

답변

0

지금까지 내가 아는 한 Windows 서비스를 다시 시작하는 예외를 throw 할 수 없습니다.

나는 일반적으로 try catch (로깅 포함)를 캡슐화하여 서비스를 중단시키는 예외를 방지합니다. 이는 사용자가 제안한 것과 반대입니다.

오류가 발생하여 서비스를 중지하고 (확실하지 않음) 서비스가 중지되면 다시 시작하도록 구성 할 수 있습니까?

1

예외의 근본적인 원인을 해결하는 것이 더 좋을 수도 있지만 특정 시나리오에서는 fail fast 방법을 구현하는 것이 유효합니다. 사실, 어떤 방식 으로든 "결함이있는"프로세스를 죽일 수있는 능력은 fault tolerance의 개념에 중요합니다.

void KillSelf() 
{ 
    try 
    { 
     // Code to close open connections/dispose 
     // of unmanaged resources etc 
     ... 
    } 
    finally 
    { 
     Environment.Exit(1); 
    } 
} 

서비스 복구 옵션이 자동으로 다시 시작하도록 설정해야합니다 : Windows 서비스를 만들기 위해 그래서

는 자살 커밋합니다. 이렇게하면 서비스가 다시 정상적으로 돌아올 수 있습니다.

관련 문제