"ExtensionlessUrlHandler-Integrated-4.0"처리기의 모듈 목록에 잘못된 "ManagedPipelineHandler"모듈이 있습니다.


252

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


어떤 버전의 IIS를 사용하고 있습니까?
— chue x

IIS 7.5 (7.5.7600.16385)
— Ivan Peric

귀하의 질문에,하지만 비슷한 문제 및 asuming 다른 사용자를 위해 아니 직접적인 대답 당신은 인터넷에 직면 응용 프로그램이 : 당신은 그냥 같은 외부 서비스를 사용할 수 uptimerobot.com을 응용 프로그램 시간의 모든 X 금액을 터치. 앱을 실행 상태로 유지 + 서비스의 추가 이점 (가동 시간, 경고 등)이 있습니다.
— qbantek

@qbantek 내가 작업중 인 응용 프로그램이 인터넷을 향하고 있지는 않지만 나에게 좋은 아이디어를주었습니다. 상태 확인 유형을 단순 HTTP GET으로 설정하여로드 밸런서를 사용하여 주기적으로 작업 할 수 있습니다. 감사합니다
— Ivan Peric

답변:


24

문제

당신이 사용하는 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"요청을 보냅니다.


2
코드로 구현할 수있는 솔루션을 찾고 있었지만 이것은 "충분히 좋은"수준에 가까워서 현상금을 수여하고 있습니다. 그러나 @danijelk가 제공 한 솔루션이 내가 지정한 이유 이외의 이유로이 질문을 겪는 대부분의 사람들에게 가장 유용하다고 생각합니다. 그래서 이것은 그들이 그것을 볼 수있는 메모입니다.
— Ivan Peric

650

에 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


답변 주셔서 감사합니다. 나는 이미 그것을 시도했지만 작동하지 않았다. :( –
— Osama khodrog

8
Windows Server 2012에서는 작동하지 않습니다.이 페이지에서 Zach의 게시물을 읽으십시오.
— Ivan Akcheurov

감사. Azure의 가상 컴퓨터 에서이 작업을 수행했습니다. 그래도 내가 알고 싶은 것은 새로운 설치에서 이것을 해야하는 이유입니다. ASPNET이 제대로 설치되면 스스로 등록됩니까? 내 생각에 그것은 설치 순서와 관련이 있습니다.
— David Bridge

4
.NET 4.5.x 또는 4.6.x를 사용하는 경우 4.0을 언급하고 해당 사항이 적용되지 않는다고 생각하는 것에 속지 마십시오. 이 문제는 IIS보다 .NET을 설치하는 순서와 관련이 있습니다. 내 응용 프로그램에서 .NET 4.5.2를 사용하더라도 명령을 실행하면 (64 비트 버전) 명령이 수정되었습니다.
— Coxy

Windows 2008, 새로 설치 AWS microserver를 사용하려면이 명령을 실행해야했습니다. 시스템과 관련이 없다고 생각하는 사람들을 위해.
— terary

170

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에서는 마법사와 문구가 약간 다르지만 알아낼 것입니다). 이것을 말하면서, 모든 종속성을 포함하여 웹 플랫폼 설치 프로그램을 통해 모든 것을 설치 한 후 이것이 필요한 이유는 완전히 저를 벗어났습니다 ...


3
Windows Server 구성은 PITA입니다. 중앙 패키지 관리 시스템이없는 이유는 무엇입니까?
— Kugel

당신이 웹 플랫폼으로 IIS를 설치 한 경우, Virgo139의 의견에 대한 검사가, 내 쉽게 문제 해결
— castors33을

이것은 Windows 10 Pro 빌드 1607에서 나에게 맞는 해결책이었습니다.
— Apogee

이것은 Windows 10에서도 나를 위해 수정되었습니다. Windows 10에서는 일반적인 명령 줄 수정 (aspnet_regiis.exe -i)을 사용할 수 없습니다.
— Nat Webb

Windows 10 Pro 용 솔루션 확인
— Zoomzoom

59

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

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


2
철자 해 주셔서 감사합니다. 저는 웹 서버-> 웹 서버-> 웹 서버 파이프를 너무 오랫동안 쳐다보고있었습니다 ... :)
— Gleno

2
역할 및 기능> 서버 역할> 웹 서버 (IIS)> 웹 서버> 응용 프로그램 개발> ASP.NET 4.6 (또는 4.5 사용자의 설정에 따라)을 확인하는 것을 잊지 마세요
— 새끼 사자 첸

1
그런 다음 IIS 서비스를 다시 부팅하십시오. 나를 위해 일했다! 감사. +1
— Rusty Nail

47

들어 윈도우 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는 정확하지만 나를 위해 일했다.


이것은 나를 위해 수정되었습니다. 제작자 업데이트로 Windows 10 pro를 실행하고있었습니다. 감사!
— Samuel Poirier

전설적인 답변! 웹 서버를 다시 빌드하고 몇 년 동안 스크립트를 업데이트하지 않았으며이 DISM 명령을 VM 프로비저닝 스크립트에 추가했습니다. 매력처럼 작동합니다.
— Chris Schaller

DISM / 온라인 / 사용 - 기능 / featurename : IIS-ASPNET45은 / 모두 2016 윈도우 서버에 나를 위해 일한
— 에드 나시 압바스에게

덕분에 나는 여전히 직업이 있습니다! :) 일했다.
— Scott

42

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

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

이 작업을 수행 할 때 "aspnet_client"폴더가 IIS Connections의 Sites 디렉토리 아래 웹 사이트에 추가됩니다.
— eaglei22

26

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

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

FWIW는, 서버 2012 R2는이 옵션이 지원되지 않습니다 말한다, 그리고 ASP.NET 4.5 사용할 수 있도록 기능 대화 상자를 사용하여 제안
— bvj

그렇습니다. Zach의 대답이 이것에 적용됩니다.
— Neshta

13

필자의 경우 (Windows 10 + IIS 10) " Windows 기능 사용 또는 사용 안 함 "을 연 다음 인터넷 정보 서비스> 월드 와이드 웹 서비스> 응용 프로그램 개발 기능> ASP.NET 4.6으로 이동해야합니다.


1
광산은 Windows 2012 R2의 IIS였습니다. 서버 관리자> 관리> 역할 및 기능 추가> 역할 기반 또는 기능 기반 설치> (서버 선택)> 웹 서버 (IIS)> 웹 서버> 응용 프로그램 개발> ASP.NET 4.5에서 호환 가능한 ASP.NET을 추가했습니다. @ArsmanAhmad가 말했듯이 좋은 풀림 검사는 App Pool .NET CLR 버전이 v4.0으로 설정되어 있는지 확인하는 것입니다.
— GBU

6

몇 시간 동안 갈 수 있었기 때문에 이것을 자신의 게시물로 만들었습니다.

나는이 문제와 aspnet_regiis 수정에 대해 여기와 다른 곳에서 수십 개의 유사한 게시물을 보았습니다. 그들은 나를 위해 일하지 않았고 aspnet_regiis는 이상하게 행동하고 옵션 등을 나열했습니다.

위의 사용자 ryan-anderson이 표시했듯이 .exe를 입력 할 수 없습니다

서버에서 IIS 외부에 익숙하지 않은 사람들을 위해 간단한 단계를 수행하십시오.

  1. 이 경로와 유사한 폴더에서 aspnet_regiis를 찾으십시오. c : \ Windows \ Microsoft.NET \ 프레임 워크 \ v4.0.30319 \

  2. 시작 메뉴 또는 어디서나 명령 프롬프트를 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행하도록 지시하십시오. Windows "실행"기능을 사용하면 작동하지 않거나 나에게 적합하지 않습니다.

  3. aspnet_regiis 실행 파일로 돌아갑니다. 명령 프롬프트에 마우스 오른쪽 버튼으로 클릭하거나 명령 프롬프트에 주소를 복사하여 붙여 넣습니다.

  4. 있는 경우 끝에있는 .exe를 제거하십시오. 이것이 핵심입니다. 끝에 -i (공간 빼기 눈)를 추가합니다. 시작하다.

이 작업을 올바르게 수행하면 asp.net 설치가 시작되고 성공했음을 알 수 있습니다.


나를 위해 완벽하게 일했습니다. 감사합니다.
— Mike

5

IIS 관리자 에서 application-site버전을 v2.0로 설정했는지 확인하십시오 .v4.0

응용 프로그램 풀> 응용 프로그램> 고급 설정> .NET Framework 버전

그런 다음을 설치하십시오 ASP.NET.

32 비트 OS (Windows) :

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

64 비트 OS (Windows)의 경우 :

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

application-siteIIS 관리자에서 다시 시작 하고 즐기십시오.


네, 답을 가장 간단하게하기 위해 최선을 다했습니다. ;-) @yuyangJian
— Arsman Ahmad

4

나는 이것이 오래된 사람이라는 것을 알고 있지만 가치를 더할 수 있다고 생각했습니다. 도메인 외부에서 Server Core를 실행하는 사용자 (도메인 구성원은 서버 관리자를 원격으로 실행하여 기능 / 역할을 추가 / 제거 할 수 있음)의 경우 명령 줄을 사용해야합니다.

Powershell 사용자는 "Install-WindowsFeature Web-Asp-Net45"를 입력 할 수 있습니다

서버 관리자를 사용하는 것과 같습니다.


4

.net 4.7이 설치된 동일한 오류 메시지가 표시되었습니다.

해결책은 ".NET Framework 4.7 Advanced Services"-> "ASP.NET 4.7"이 이미 선택된 "Windows 기능 켜기 또는 끄기"와 함께 앞서 언급 한 게시물을 따르는 것입니다.

목록의 아래 부분에는 "인터넷 정보 서비스"및 하위 응용 프로그램 "응용 프로그램 개발 기능"-> "ASP.NET 4.7"이 있으며 확인해야합니다.

이 기능을 활성화하면 다른 기능이 모두 활성화됩니다. Ok 버튼을 누르면 문제가 해결되었습니다. 윈도우 기능 대화 상자의 스크린 덤프


나는이는 것을 추가해야 창 (10) 프로 에디션
— theodor.johannesen

2

Windows Server 2012에서 작업하고 있습니다. .NET Extensibility 4.5 기능이 켜져 있습니다. WebDAVModule이 제거되었습니다. ASP.NET 경로 '/ docs'에서 여전히 500.21 오류가 발생했습니다.

'skipManagedModules'를 false로 변경하면 문제가 해결되었습니다.

<applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
        <add initializationPage="/docs" />    
</applicationInitialization>

https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI 덕분에


2

ASP.NET 4.7 옵션 "Windows 기능 켜기 또는 끄기"를 추가하여이 문제를 해결했습니다.

여기에 이미지 설명을 입력하십시오


1

나는이 문제가 있었고 Express가 아닌 에디션에서도 다음 폴더를 제거하는 것이 도움이된다는 것을 알았습니다.

C:\Users\<user>\Documents\IISExpress


1

이 오류는 지난 주 어느 곳에서도 발생하기 시작하여 컴퓨터의 기존 웹 사이트에 영향을 미칩니다. 나는 여기서 제안을 시도하는 것에 운이 없었습니다. 결국 IIS에서 WebDAV를 완전히 제거했습니다 (Windows 기능-> 인터넷 정보 서비스-> 월드 와이드 웹 서비스-> 공통 HTTP 기능-> WebDAV 게시). 이 조치를 취한 후에 IIS를 다시 설정하여 오류가 마침내 해결되었습니다.

Windows 업데이트가 문제를 시작했다고 추측 할 수는 있지만 확실하지 않습니다.


방금 같은 문제가있었습니다. IIS 설정을 전환하는 일부 Windows 업데이트를 설치했습니다. WebDAV Publishing을 끄면 다시 수정되었습니다.
— ElliotSchmelliot

0

iis의 "ExtensionlessUrlHandler-Integrated-4.0"형식을 System.Web.DefaultHttpHandler로 변경하여이 문제를 해결할 수 있습니다.


0

나를 위해, 내 서버에서 WebDAV를 제거하는 것은 반환하는 응용 프로그램 발생 503 Service Unavailable사용할 때 오류 메시지 PUT또는 DELETE내가 돌아 다시 재설치 있도록. 또한 .NET Framework 4.5를 완전히 제거하고 다시 설치하려고 시도했지만 제안대로 재 등록을 시도했지만 아무 소용이 없습니다.

나는에 대해 WebDAV를 사용하지 않도록 설정하여이 문제를 해결할 수 있었다 개별 응용 프로그램 풀,이 사용할 때 '나쁜 모듈의 오류를 중지 PUT하거나 DELETE.

개별 앱 풀에 대해 WebDAV를 비활성화합니다 :

  1. 영향을받는 응용 프로그램 풀을 클릭하십시오.
  2. WebDAV Authoring Tools목록에서 찾기
  3. 클릭하여 엽니 다
  4. Disable WebDAV오른쪽 상단을 클릭하십시오 .

타 다 아아!

여전히 제거 항목을 web.config파일 에 그대로 두었습니다 .

 <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
    </handlers>
 <system.webServer>

이 링크 는 지침을 찾은 곳이지만 명확하지 않습니다.


0

이것은 OP에 유용한 솔루션은 아니지만 동일한 "오류"메시지와 관련이 있습니다.

.NET 4.5가 올바르게 설치된 IIS8.5에서 PHP 페이지를 호스팅하고 있습니다.

우리는 사전로드 기능을 사용하여 애플리케이션이 항상 전반적으로 응답 할 수 있도록합니다.

잠시 후 우리는이 오류가 무작위로 발생하기 시작했습니다.

web.config에서 : skipManagedModules를 true로 설정했습니다.->이 작업을 수행하지 마십시오!

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
<applicationInitialization skipManagedModules="false" doAppInitAfterRestart="true">
  <add initializationPage="/" />
</applicationInitialization>
...

웹 사이트는 PHP이지만 페이징으로의 라우팅은 모듈에 의해 관리됩니다 !!!


0

나는 또한 그 문제에 부딪쳤다. 내 MVC4 앱이 IIS 8.5가 설치된 Windows Server 2012 R2에서 실행되고 있습니다. 게시 된 솔루션 중 어느 것도 나를 위해 일하지 못했습니다 ... IIS 기능을 통해 누락 된 프레임 워크를 설치하면 해결할 수 있었지만 설치는 항상 실패했습니다.

나는 Web Platform Installer다음 패키지 를 사용해야 하고 설치했다.

여기에 이미지 설명을 입력하십시오


0

공유 호스팅 서버에서 호스팅되는 웹 응용 프로그램 에서이 문제에 직면했습니다. 따라서 IIS에 직접 액세스 할 수 없었으므로 여기서 제안 된 많은 솔루션을 적용 할 수 없었습니다.

호스팅 공급자의 제어판에서 IIS 및 ASP.Net에 대한 오류 로깅을 활성화했습니다. 그런 다음 오류가 실제로 누락 된 cshtml에 있음을 알게되었습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.