2010-12-18 4 views
6

장기 실행 비동기 스레드가있는 WCF 서비스가 있습니다. 이 장기 실행 작업은 1 일 이상 실행할 수 있습니다. 우리는 IIS 6WCF의 장기 실행 비동기 스레드

스레드가 확인을 실행에 WCF 서비스를 호스팅하고 있지만 20 분 우리는 오류 메시지가 수신됩니다

스레드가로 죽은
"스레드가 중단되었습니다" 결과.

우리의 WCF 서비스 구성 :
[인 ServiceBehavior (InstanceContextMode = InstanceContextMode.Single)]
[인 ServiceBehavior (들면, ConcurrencyMode = ConcurrencyMode.Single)]

이 문제의 원인을 제안 할 수 있습니다?

답장을 보내 주셔서 감사합니다.

답변

9

이 웹 서비스에 아무런 작업 (요청 없음)이 없으면 IIS가 응용 프로그램 도메인을 언로드하기로 결정할 수 있으며 물론 모든 스레드가 종료됩니다. 기본값은 20 분이며 IIS의 응용 프로그램 풀 속성에서 구성 할 수 있습니다. 또한 메모리 부족으로 실행되는 시스템과 같이 응용 프로그램 풀이 재생 될 수있는 다른 요인이 있습니다. 따라서 IIS에서 이러한 것을 호스팅하는 것은 신뢰할 수 없습니다. Windows 서비스에서 장기 실행 태스크를 호스팅하는 것을 고려할 수 있습니다.

+0

@Artur의 경우 응용 프로그램 풀의 설정을 확인하십시오. 그런 경우 Windows 서비스를 사용하는 것이 좋습니다. –

+2

고맙습니다. Windows Service에서 호스팅해야한다고 생각합니다. –

7

IIS6에는 요청이없는 미리 정의 된 시간 후에 응용 프로그램 풀이 종료되는 설정이 있습니다. 기본값은 20 분입니다. 그것은 당신이 뛰어 다니고있는 것처럼 보입니다. 이 설정은 응용 프로그램 풀 속성 => 성능 탭 => "유휴 상태 인 후 작업자 프로세스 종료"의 체크 표시 제거에서 찾을 수 있습니다.

일반적으로 스레드를 중단하거나 프로세스를 종료하는 많은 작업이 있기 때문에 IIS에서 장기 실행 작업을 호스팅하는 것은 좋지 않은 생각입니다. 응용 프로그램 풀이 가장 눈에 띄는 재활용입니다.

+0

@driis에게 감사의 말을 전합니다. –

2

Windows 서비스 호스트에서 장기 실행 작업을 시작하는 WCF 끝점을 가질 수 있습니다. Windows 서비스는 길고 오랜 시간 실행되어야하며 이러한 상황에 이상적입니다.

관련 문제