2011-01-25 2 views
0

MSMQ 대기열을 폴링하고 들어오는 메시지를 처리기로 발송하는 Windows 서비스가 있습니다. 서비스가 종료되기를 원할 때, 큐의 Receive를 일정 시간 후에 타임 아웃하도록하지 않는 한, 그렇게하지 않을 것입니다. Windows 서비스 컨트롤러가 서비스를 종료 할 수 없으면 (& 또한 설치 프로그램을 테스트해야합니다). 실제로는 대기열에 많은 부하가 걸리기 때문에 문제가되지 않습니다. 하지만 내 Dev 환경에서, 나는 이벤트 로그에 수많은 허위 오류 항목이 있습니다. 예를 들어 :이 수신 기능의 합법적 인 사용으로 볼 수 있기 때문에Windows 이벤트 로그의 가짜 MSMQ 시간 초과 오류

while (!Signal) 
     { 
      try 
      { 
       var msg = Queue.Receive(TimeSpan.FromSeconds(1)); 
       if (Signal) 
       { 
        EventLog.WriteEntry("LoggingHub", 
         "Terminating QueueReader for Path [" + 
         Queue.Path + "]", EventLogEntryType.Information); 
        return; 
       } 
       // etc etc etc 

나에게 오류보고를 해제 할 수있는 방법이 있나요?

+0

수신시 제한 시간을 설정하는 것이 좋습니다. 나는 무한 대기 시간이 항상 오류 상태에 잘 반응하지 않는 문제를 일으키는 것을 발견했습니다. 짧은 시간 제한은 수신이 작동하지 않을 수있는 시간을 제한합니다. –

답변

0

결국 나는 BeginReceive와 EndReceive를 사용하여 비동기 콜백을 위해 타임 아웃 방식을 포기했습니다. 나는 즉시 서비스를 중지 할 수 있으며 소중한 자원을 무의미하게 사용하는 것을 삼 간다.

FWIW : 정당한 사용 시나리오가되어야한다는 @John breakwell에 동의하지만, 이벤트 로그에 허위 오류가 가득 찬 경우 효과가 없습니다. API 변형은 일정 기간 (예 : ACK 또는 유사) 내에 이벤트가 발생할 것으로 예상되는 경우에만 사용되며 타임 아웃을 프로토콜 오류로 해석 할 수 있다고 가정 할 수 있습니다.