솔직히 말해서, 나는 IIS에서 더티 트릭을 돌리려고 노력했으며 그것을 극복 할 것이라고 생각했을 때 내 해결 방법이 효과가 없다는 것을 깨달았습니다. 내가 시도한 것은 다음과 같습니다.
1) IProcessHostPreloadClient 를 상속 하고 Preload 메서드 구현 에서 모든 무거운 초기화를 수행 하는 Preloader 클래스 가있는 ASP.NET 응용 프로그램이 있습니다 (응용 프로그램은 복잡하고 막대한 시스템의 일부이므로 필요한 모든 연결을 설정하는 데 약 2 분이 소요됩니다) 서비스를 제공하고 일부 Unity 등록을 사전 인스턴스화합니다.
2) 응용 프로그램 종료 (구독 취소, 연결 끊기, 처리 등)에서 수행해야 할 많은 작업이 있으며 Global.asax의 * Application_End * 메서드에 가장 적합한 곳이라고 생각합니다 .
3) 사용자 활동이있을 때 모든 것이 잘 작동합니다 (위의 웹 응용 프로그램이 포함 된 응용 프로그램 풀이 시작된 후 첫 번째 요청으로 인해 * Application_Start *가 호출되고 이후에 응용 프로그램 풀 중지 또는 재활용시 * Application_End *가 호출 됨). 사용자 활동이없고 응용 프로그램이 48 시간 동안 활성화 된 후 자체 재시작을 시도 할 때 발생합니다 (구성된 요구 사항). 요청이 없었기 때문에 응용 프로그램이 공식적으로 시작되지 않았습니다. Ergo, * Application_End *가 호출되지 않으므로 정상적으로 중지 할 수 없습니다.
4) 이제 지저분한 부분 이옵니다 ... Preload 메서드 가 끝날 때 코드에서 GET 요청을 시도했지만 작동했습니다. 그러나이 솔루션은 효과가 있었지만 나에게 나쁜 것처럼 보였습니다. 그래서 많은 것을 시도했지만 마지막으로 시도한 것은 다음과 같습니다.
SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);
... 그리고 그 목적을 달성했습니다. * 응용 프로그램을 시작했습니다 (응답을 확인했습니다. 초기 요청에 표시 될 로그인 페이지가 포함되어 있음). 응용 프로그램 풀 종료 응용 프로그램에서 * Application_End *에서 필요한 작업을 수행하여 정상적으로 종료되었습니다.
그러나
이런 방식으로 응용 프로그램이 시작 (사전로드 및 시작) 된 후 웹 브라우저를 통해 응용 프로그램에 접근하려고 할 때 발생했습니다.
HTTP 오류 500.21-내부 서버 오류 처리기 "ExtensionlessUrlHandler-Integrated-4.0"의 모듈 목록에 잘못된 모듈 "ManagedPipelineHandler"가 있습니다.
나는 이것을 알아낼 수 없다. 왜 이런 일이 발생하고 어떻게 해결하는지 말해 줄 수 있습니까?
이것을 이해하지 못하면 첫 번째 솔루션 (코드에서 GET 요청 보내기)으로 돌아가지만 무엇이 잘못되었는지 알지 못 하므로이 문제로 인해 버그가 발생합니다.