2014-12-09 2 views
0

우리는 IIS 호스팅 WCF 서비스를 사용하여 작업 할 많은 양의 데이터를받습니다. 이 서비스는 여러 작업자 스레드를 실행 한 다음 작업자 스레드를 그대로 두어 반환하여 작업을 완료합니다 (시간이 걸릴 수 있습니다). WCF 서비스가 충분히 유휴 상태이면 IIS가 작업자 스레드를 중단하는 응용 프로그램 풀을 재활용합니다. 이 문제는 응용 프로그램 풀을 유지하기 위해 가끔씩 작업자 스레드가 더미 서비스를 호출하게함으로써 우회되었습니다. 이 전체 설정이 정말 나쁜 생각이라 생각하면 완전히 동의합니다 (내 코드 아님). 그래서 그 말을 할 필요가 없습니다.ThreadAbortException에서 더 많은 정보

문제는 가끔 ThreadAbortException이 발생하는 것입니다. 스레드 중단을 시작한 사용자/사람에 대한 추가 정보를 얻을 수있는 방법이 있습니까? 코드가 아님을 알고 있습니다.

+0

아마도 예외에 포함 된 호출 스택을보고 있습니까? –

+0

Uwe, 호출 스택 꽤 임의입니다, 만약 내가 중단을 외부 프로세스에 의해 시작됩니다 기대했다. – Rubio

답변

0

IIS 로그가 답변을 제공합니다. AFAIK, 새로운 바이너리가로드되면 IIS는 모든 서비스 호출이 끝날 때까지 대기하고 새로운 호출은 받아 들여지지 않을 때까지 기다린 다음 응용 프로그램 풀을 재활용합니다. 그러나 IIs는 서비스 후에 실행되는 백그라운드 스레드에 대한 지식이 없으므로 무료로 응용 프로그램 풀을 재활용한다고 생각합니다. 어떤 경우 배경 스레드가 계속 실행되는 동안 새 버전을 업로드하고 있습니다. 어쨌든, 매우 나쁜 아키텍처.