2017-05-02 5 views
1

우리는 WCF 서비스를 사용하고 Windows 서비스에서 호스팅하고 있습니다. 이 개념은 here으로 설명됩니다.WCF Windows 서비스에서 장기 실행 스레드에 대한 우려

우리는 WCF 서비스 다음과 같은 형태 호출이이 WCF 호출 내에서

[System.ServiceModel.OperationContractAttribute(...)] 
    [System.ServiceModel.FaultContractAttribute(...)] 
    void TriggerLongRunningOperation(int id); 

을, 우리가 분사 일부 파이어 앤 포겟 일부 백그라운드 작업을 수행하기 위해 새로운 스레드를. 대부분의 경우 하나만있을 수 있지만 여러 개가있을 수 있습니다. WCF 요청은 기본적으로 즉시 끝나고 fire-and-forget 스레드는 작업을 수행합니다.

 Task task = Task.Run(() => 
     { 
      // some stuff. 
     }); 

분리 된 작업은 2 분에서 1 시간까지 지속될 수 있습니다.

IIS를 통해 호스팅되지 않기 때문에 WCF 프로세스에서 장시간 실행되는 스레드가 걱정됩니다. 응용 프로그램 풀 재활용에 대해 걱정할 필요가 없습니다.

Windows 서비스에서 호스팅되는 WCF 서비스에서 새 스레드를 실행할 때주의해야 할 사항은 무엇입니까? 스레드는 어떤 경우에 중단됩니까?

.NET 4.5.2

+0

http://hangfire.io와 같은 배경 그림을 볼 수 있습니다. 이것은 Windows 서비스에서 실행할 수 있으며 내구성 백그라운드 작업 실행을 제공합니다. –

답변

2

나는 신뢰성에 대해 우려 할 것이다. 이러한 스레드는 예외 또는 시스템 재부트 또는 스레드가 손실 될 수있는 많은 다른 상황으로 인해 중단 될 수 있습니다.

또한 화재와 잊지 말고 접근 방식은 신뢰성과는 아무런 관련이 없습니다. 단지 발신자가 전체 작업 결과에 신경 쓰지 않는다는 의미입니다.

따라서 신뢰할 수있는 메시지 대기열은 RabbitMQ과 같습니다. 즉,이 작업을 실행하는 다른 스레드에서 이러한 가동 및 보관 작업을 비동기 적으로 처리 할 것이며, 문제가 발생하면 다시 시도하여 성공적으로 완료 할 수 있습니다.