"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.