[C#] “ExtensionlessUrlHandler-Integrated-4.0″처리기의 모듈 목록에 잘못된 “ManagedPipelineHandler”모듈이 있습니다.

솔직히 말해서, 나는 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 요청 보내기)으로 돌아가지만 무엇이 잘못되었는지 알지 못 하므로이 문제로 인해 버그가 발생합니다.



답변

문제

당신이 사용하는 SimpleWorkerRequest를 그것을 위해 설계되지 않았 음을 시나리오에서. IIS 내부에서 사용하고 있습니다 . 이전 MSDN 링크를 보면 (강조는 내 것입니다) :

인터넷 정보 서비스 (IIS) 응용 프로그램 외부에서 ASP.NET 응용 프로그램을 호스팅하는 데 사용할 수있는 HttpWorkerRequest 추상 클래스의 간단한 구현을 제공합니다 . SimpleWorkerRequest를 직접 사용하거나 확장 할 수 있습니다.

또한 System.Web.Hosting 네임 스페이스 ( SimpleWorkerRequest이 네임 스페이스에 있음) 에 대한 MSDN 설명서 를 보면 위와 비슷한 내용이 나타납니다 (중점은 내 것입니다).

System.Web.Hosting 네임 스페이스는 Microsoft 인터넷 정보 서비스 (IIS) 외부의 관리되는 응용 프로그램에서 ASP.NET 응용 프로그램을 호스팅하는 기능을 제공합니다 .

해결책

에 대한 호출을 제거하는 것이 좋습니다 SimpleWorkerRequest. 대신 Microsoft 솔루션을 사용하여 웹 사이트가 재활용 된 후 자동으로 시작되도록 할 수 있습니다. IIS 7.5 용 Microsoft 응용 프로그램 초기화 모듈이 필요합니다 . 구성이 복잡하지는 않지만 정확한 옵션을 이해해야합니다. 그렇기 때문에 IIS 7.5 용 응용 프로그램 초기화 UI 도 권장합니다 . UI는 MSDN 블로거가 작성합니다.

그렇다면 Microsoft 솔루션은 정확히 무엇입니까? IIS는 응용 프로그램 풀이 시작된 후 웹 사이트에 “get”요청을 보냅니다.


답변

에 ASP.NET을 다시 등록하십시오 aspnet_regiis -i. 그것은 나를 위해 일했다.

.NET 4의 가능한 경로 (높은 명령 프롬프트에서) :

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

http://forums.iis.net/p/1190643/2026401.aspx


답변

Windows 8 / Windows Server 2012 및 .Net 4.5에서이 오류가 발생하면 다음 지시 사항을 따르십시오.
http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html

로 이동 “설정 Windows 기능”
그런 다음 인터넷 정보 서비스 그리고 세계 와이드 웹 서비스는 다음 응용 프로그램 개발 특징 그리고 ASP.NET 4.5 수

이것은 나를 위해 일했습니다 (Windows Server 2012에서는 마법사와 문구가 약간 다르지만 알아낼 것입니다). 이것을 말하면서, 모든 종속성을 포함하여 웹 플랫폼 설치 프로그램을 통해 모든 것을 설치 한 후 이것이 필요한 이유는 완전히 저를 벗어났습니다 …


답변

이 페이지에 대한 대부분의 조언을 따랐음에도 여전히 Windows Server 2012에서 문제가 발생했습니다. .NET Extensibility 4.5를 설치하면 문제가 해결되었습니다.

Add Roles and Features > Server Roles > Web Server (IIS) > Web Server > Application Development > .NET Extensibility 4.5


답변

들어 윈도우 10 / 윈도우 서버 2016 다음 명령을 사용 :

dism /online /enable-feature /featurename:IIS-ASPNET45 /all

aspnet_regiisWindows 10 (Creators Update 이상) 또는 Windows Server 2016에서는 제안 된 답변이 작동하지 않습니다.

C : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -i
Microsoft (R) ASP.NET RegIIS 버전 4.0.30319.0
로컬 컴퓨터에 ASP.NET을 설치 및 제거하는 관리 유틸리티.
저작권 (C) Microsoft Corporation. 판권 소유.
ASP.NET (4.0.30319.0) 설치를 시작하십시오.
이 버전의 운영 체제에서는이 옵션이 지원되지 않습니다. 대신 관리자는 “Windows 기능 켜기 / 끄기”대화 상자, 서버 관리자 관리 도구 또는 dism.exe 명령 줄 도구를 사용하여 IIS8과 함께 ASP.NET 4.5를 설치 / 제거해야합니다. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=216771을 참조하십시오 .
ASP.NET (4.0.30319.0) 설치가 완료되었습니다.

흥미롭게도 “Windows 기능 켜기 / 끄기”대화 상자에서 .NET 또는 ASP.NET 4.6의 선택을 해제 할 수 없었으며 위의 DISM 명령 만 작동했습니다. 확실하지 여부를 featurename는 정확하지만 나를 위해 일했다.


답변

다음 명령 중 하나를 실행하십시오.

32 비트 Windows OS의 경우 :

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

64 비트 Windows OS의 경우 :

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -I


답변

https://stackoverflow.com/a/13266763/1277458 는 완벽하게 작동합니다. 그러나 64 비트 운영 체제가있는 경우 경로에서 Framework 대신 Framework64를 사용하십시오.

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i