“ExtensionlessUrlHandler-Integrated-4.0” işleyicisinin modül listesinde hatalı bir “ManagedPipelineHandler” modülü var


252

Dürüst olmak gerekirse, IIS'de kirli bir hile yapmaya çalıştım ve tam da bundan kaçacağımı düşündüğümde, geçici çözümümün çalışmadığını fark ettim. İşte yapmaya çalıştığım şey:

1) IProcessHostPreloadClient'i devralan Preloader sınıfına sahip olan ve Preload yöntemi uygulamasındaki tüm ağır başlatmayı yapan ASP.NET uygulamam var (uygulama karmaşık ve muazzam bir sistemin parçası, bu yüzden gerekli tüm bağlantıların kurulması yaklaşık 2 dakika sürüyor hizmetler ve bazı Birlik kayıtlarının önceden başlatılması).

2) Uygulama kapatma (abonelikten ayrılma, bağlantıyı kesme, imha etme, ...) yapılması gereken çok işim var ve bunu yapmak için en iyi yer Global.asax'ta bulunan * Application_End * yönteminde .

3) Kullanıcı etkinliğim olduğunda her şey iyi çalışıyor (yukarıda belirtilen web uygulaması içeren Uygulama Havuzu başlatıldıktan sonra ilk istek * Application_Start * 'ın çağrılmasına ve daha sonra * Application_End * Uygulama Havuzu durdurma veya geri dönüşümde çağrılmasına neden olur), ancak sorunlar kullanıcı etkinliği olmadığında ve uygulama 48 saat etkin olduktan sonra kendini yeniden başlatmaya çalıştığında oluşur (yapılandırılmış gereksinim). Hiçbir istek olmadığından, başvuru resmen başlamamıştır. Ergo, * Application_End * çağrılmayacağı için durdurulamaz.

4) Şimdi dağınık kısmı geliyor ... Preload yönteminin sonunda koddan bir GET isteği yapmaya çalıştım ve çalıştı. Ama işe yarasa bile bu çözüm benim için kötü görünüyordu. Yani, bir çok şey denedim ve son denediğim şey şuydu:

SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);

... ve bu amacını gerçekleştirdi. * Application_Start * çağrıldı (yanıtı kontrol ettim, ilk istekte görüntülenmesi gereken giriş sayfasını içeriyordu) ve Application Pool kapatma uygulamasında * Application_End * 'de gerekli çalışmaları yaparak incelikle sona erdi.

FAKAT

Uygulama bu şekilde başlatıldıktan (önceden yüklendikten ve başlatıldıktan sonra), Web tarayıcısı üzerinden uygulamaya ulaşmak istediğimde olan buydu:

500.21 HTTP Hatası - Dahili Sunucu Hata İşleyicisi "ExtensionlessUrlHandler-Integrated-4.0" modül listesinde hatalı "ManagedPipelineHandler" modülü var

Bunu anlayamıyorum. Biri bana bunun neden olduğunu ve nasıl düzeltileceğini söyleyebilir mi?

Eğer bunu anlamazsam, ilk çözüme geri döneceğim (koddan GET isteği göndererek) ama neyin yanlış olduğu hakkında bir fikrim bile olmadığından bu sorun beni rahatsız edecek.


hangi IIS sürümünü kullanıyorsunuz?
chue x

IIS 7.5 (7.5.7600.16385)
Ivan Peric

Sorunuza doğrudan bir cevap değil, benzer sorunu olan ve internete bakan bir uygulamanız olduğunu varsayan diğer kullanıcılar için: her X miktarında uygulamanıza dokunmak için uptimerobot.com gibi harici bir hizmeti kullanabilirsiniz . Uygulamanızı çalışır durumda tutarsınız + hizmetin ek avantajlarından yararlanırsınız (çalışma süresi, uyarılar vb.).
qbantek

@qbantek Üzerinde çalıştığım uygulama internete dönük olmasa da bana iyi bir fikir verdin. Durum durumu kontrol türünü Basit HTTP GET olarak ayarlayarak periyodik dokunma yapmak için yük dengeleyiciyi kullanabilirim. Teşekkürler
Ivan Peric

Yanıtlar:


24

Sorun

SimpleWorkerRequest için tasarlanmadığı bir senaryoda kullanıyorsunuz . IIS içinde kullanıyorsunuz . Önceki MSDN bağlantısına bakarsanız (vurgu benimdir):

ASP.NET uygulamalarını bir Internet Information Services (IIS) uygulaması dışında barındırmak için kullanılabilecek HttpWorkerRequest soyut sınıfının basit bir uygulamasını sağlar . SimpleWorkerRequest'i doğrudan kullanabilir veya genişletebilirsiniz.

Ayrıca, System.Web.Hosting ad alanının MSDN belgelerine bakarsanız ( SimpleWorkerRequestbu ad alanındadır), yukarıdakine benzer bir şey de görürsünüz (yine vurgu benimdir):

System.Web.Hosting ad alanı, Microsoft Internet Information Services (IIS) dışındaki yönetilen uygulamalardan ASP.NET uygulamalarını barındırma işlevini sağlar .

Çözüm

Çağrısını kaldırmanızı tavsiye ederim SimpleWorkerRequest. Bunun yerine, web sitenizin geri dönüştürüldükten sonra otomatik olarak başlatıldığından emin olmak için bir Microsoft çözümü kullanabilirsiniz. İhtiyacınız olan şey, IIS 7.5 için Microsoft Uygulama Başlatma Modülüdür . Yapılandırmak karmaşık değildir, ancak kesin seçenekleri anlamanız gerekir. Bu nedenle IIS 7.5 için Uygulama Başlatma Arayüzünü de öneriyorum . Kullanıcı arayüzü bir MSDN blog yazarı tarafından yazılmıştır.

Peki Microsoft çözümü tam olarak ne yapıyor? Yapmaya çalıştığınız şeyi yapar - IIS, uygulama havuzu başlatıldıktan sonra web sitenize bir "get" isteği gönderir.


2
Ben kodda uygulanabilir bir çözüm bulmak için atlamalı, ama bu kadar ödül vermek için ben alır gibi "yeterince iyi" yakındır. Ama @danijelk'in sağladığı çözümü, bu soruyla karşılaştığım çoğu insan için belirttiğim nedenden ötürü en yararlı olacak sanırım. Bu onların göz önünde bulundurmaları için bir not.
Ivan Peric

650

ASP.NET'i ile yeniden kaydetmeyi deneyin aspnet_regiis -i. Benim için çalıştı.

.NET 4 için olası bir yol (yükseltilmiş komut isteminden):

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

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


Cevabınız için teşekkür ederim. Bunu zaten denedim ve işe yaramadı. :( -
Osama khodrog

8
Windows Server 2012 için çalışmıyor. Zach'in bu sayfadaki gönderisini okuyun.
Ivan Akcheurov

Teşekkürler. Azure'daki bir sanal makinede bunu yaptım. Bilmek istediğim, bunu neden yeni bir kurulumda yapmak zorunda kalacağım. Kesinlikle ASPNET doğru yüklendiğinde kendini kaydeder? Sanırım kurulum sırası ile bir ilgisi var.
David Bridge

4
.NET 4.5.x veya 4.6.x kullanıyorsanız, 4.0'dan bahseden ve bunun sizin için geçerli olmadığını düşünerek aldanmayın. Bu sorun, benim için olduğu gibi .NET'ten önce IIS yükleme sırası ile ilgili olabilir. Uygulamam .NET 4.5.2 kullanıyor olsa bile komutu çalıştırmak (benim durumumda 64 bit sürüm) düzeltti.
Coxy

Windows 2008, yeni kurulum AWS mikro sunucu bu komutu çalıştırmamı istedi ... Sadece sistemiyle ilgili olmadığını düşünenler için.
terary

170

Windows 8 / Windows Server 2012 ve .Net 4.5 ile bu hatayla karşılaşıyorsanız, şu talimatları izleyin: http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html

Git "açmak, Windows açık veya kapalı özellikleri" Sonra Internet Information Services Sonra World Wide Web Hizmetleri Sonra Uygulama Geliştirme Özellikleri Ve sonra ASP.NET 4.5 etkinleştirmek

Bu benim için çalıştı (sihirbaz ve ifadeler Windows Server 2012'de biraz farklı olsa da, anlayacaksınız). Bununla birlikte, tüm bağımlılıklar da dahil olmak üzere her şeyi Web Platformu Yükleyicisi aracılığıyla yükledikten sonra neden gerekli olduğu tamamen bitti ...


3
Windows Server'ı yapılandırmak bir PITA'dır. Neden merkezi bir paket yönetim sistemi yok?
Kugel

iis'i web platformuyla yüklediyseniz, Virgo139'un yorumunu kontrol edin, sorunumu kolayca çözdü
castors33

Bu benim için düzeltme 10 Windows Pro Pro 1607, şerefe!
Apogee

Bu benim için WIndows 10 üzerinde de sabit. Windows 10'da ortak komut satırı düzeltmesine (aspnet_regiis.exe -i) izin verilmediğine dikkat
Nat Webb

Windows 10 Pro için onaylı çözüm.
Zoomzoom

59

Bu sayfadaki önerilerin çoğuna rağmen, hala Windows Server 2012 ile ilgili sorunlar alıyordum. .NET Extensibility 4.5'i yüklemek benim için çözdü:

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


2
Yazdığınız için teşekkürler, Web Sunucusu'na bakıyordum -> Web Sunucusu -> Web Sunucusu borusu çok uzun süre ... :)
Gleno

2
Roller ve Özellikler> Sunucu Rolleri> Web Sunucusu (IIS)> Web Sunucusu> Uygulama Geliştirme> ASP.NET 4.6'yı (veya kurulumunuza bağlı olarak 4.5) kontrol etmeyi unutmayın
Lionet Chen

1
Evet, ardından IIS Hizmetini yeniden başlatın. Benim için çalıştı! Teşekkürler. +1
Rusty Nail

47

For Windows'un 10 / Windows Server 2016 kullanıma aşağıdaki komutu:

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

aspnet_regiisİle önerilen önerilen yanıtlar Windows 10 (Creators Update ve üstü) veya Windows Server 2016'da çalışmaz:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -i
Microsoft (R) ASP.NET RegIIS sürüm 4.0.30319.0
Yerel makineye ASP.NET'i yüklemek ve kaldırmak için yönetim yardımcı programı.
Telif Hakkı (C) Microsoft Corporation. Tüm hakları Saklıdır.
ASP.NET'i yüklemeye başlayın (4.0.30319.0).
Bu seçenek işletim sisteminin bu sürümünde desteklenmez. Yöneticiler bunun yerine "Windows Özelliklerini Aç / Kapat" iletişim kutusunu, Sunucu Yöneticisi yönetim aracını veya dism.exe komut satırı aracını kullanarak ASP.NET 4.5'i IIS8 ile birlikte yüklemeli / kaldırmalıdır. Daha fazla ayrıntı için lütfen http://go.microsoft.com/fwlink/?LinkID=216771 adresini ziyaret edin .
ASP.NET (4.0.30319.0) yüklemesi tamamlandı.

İlginç bir şekilde, "Windows Özelliklerini Aç / Kapat" iletişim kutusu .NET veya ASP.NET 4.6 öğelerini açmama izin vermedi ve yalnızca yukarıdaki DISM komutu çalıştı. Özellik adının doğru olup olmadığından emin değilim , ama benim için çalıştı.


Bu benim için düzeltti, yaratıcı güncellemesi ile Windows 10 pro çalıştırıyordum. Teşekkürler!
Samuel Poirier

Efsanevi cevap! Web sunucumu yeniden oluşturmak zorunda kaldım ve komut dosyalarını birkaç yıl içinde güncellememiştim, bu DISM komutunu VM sağlama komut dosyalarına ekledim, bir cazibe gibi çalışıyor.
Chris Schaller

dism / online / enable-feature / featurename: IIS-ASPNET45 / all Windows Server 2016'da benim için çalıştı
Syed Nasir Abbas

Sayende hala bir işim var! :) Çalıştı.
Scott

42

Aşağıdaki komutlardan birini çalıştırın:

32 Bit Windows İşletim Sistemi için:

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

64 Bit Windows İşletim Sistemi için:

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

Bunu yaparken, "aspnet_client" klasörü IIS Connections
Sitesinin

26

Bu https://stackoverflow.com/a/13266763/1277458 mükemmel çalışıyor. Ancak 64 bit işletim sisteminiz varsa yoldaki Framework yerine Framework64 kullanın:

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

FWIW, Server 2012 R2, bu seçeneğin desteklenmediğini söylüyor ve ASP.NET
4.5'i

Evet, Zach'in cevabı bunu kapsıyor.
Neshta

13

Benim durumumda (Windows 10 + IIS 10) " Windows Özelliklerini Aç veya Kapat " ve ardından Internet Information Services> World Wide Web Hizmetleri> Uygulama Geliştirme Özellikleri> bölümüne gitmek ve ASP.NET 4.6'yı kontrol etmek zorunda kaldım


1
Benimki, Windows 2012 R2'de IIS idi. Sunucu Yöneticisi> Yönet> Rol ve Özellik Ekle> Rol tabanlı veya özellik tabanlı yükleme> (sunucunuzu seçin)> Web Sunucusu (IIS)> Web Sunucusu> Uygulama Geliştirme> ASP.NET 4.5'e uyumlu ASP.NET eklendi. @ArsmanAhmad'ın iyi bir akıl sağlığı kontrolünün App Pool .NET CLR Sürümünün v4.0 olarak ayarlanıp ayarlanmadığını doğrulamak olduğunu söyledi.
GBU

6

Bunu kendi postası yapıyorum çünkü bu beni saatlerce sürdürdü.

Belki burada ve başka yerlerde bu problema ve aspnet_regiis düzeltme hakkında bir düzine benzer yazı gördüm. Benim için çalışmıyorlardı ve aspnet_regiis tuhaf davranıyordu, sadece seçenekleri listeliyordu.

Yukarıdaki ryan-anderson kullanıcısının belirttiği gibi, .exe giremezsiniz

Sunucudaki IIS dışındaki şeylerle daha az rahat olanlar için, basit adımlarla yapmanız gerekenler.

  1. Bu yola benzer bir klasörde aspnet_regiis'i bulun. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \

  2. Başlat menüsünde veya herhangi bir yerde komut istemini sağ tıklatın ve yönetici olarak çalışmasını söyleyin. Windows "Run" özelliğini kullanmak işe yaramıyor ya da benim için çalışmadı.

  3. Aspnet_regiis yürütülebilir dosyasına geri dönün. Komut istemine doğrudan tıklayın veya adresi komut istemine kopyalayıp yapıştırın.

  4. Eğer varsa, sonunda .exe'yi kaldırın. Bu anahtar. Sonuna -i (boşluk eksi göz) ekleyin. Giriş.

Bunu doğru şekilde yaptıysanız, asp.net'i yüklemeye başladığını ve sonra başarılı olduğunu söyler.


Benim için mükemmel çalıştı. Teşekkür ederim.
Mike

5

Emin size ayarladığınız emin olun application-sitegelen sürümünü v2.0için v4.0de IIS Yöneticisi :

Uygulama Havuzları> Uygulamanız> Gelişmiş Ayarlar> .NET Framework Sürümü

Bundan sonra, yükleyin ASP.NET.

32 Bit İşletim Sistemi için (Windows):

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

64 Bit İşletim Sistemi için (Windows):

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

application-siteIIS Yöneticisi'nde yeniden başlatın ve keyfini çıkarın.


Evet, cevabı en basit hale getirmek için elimden geleni yaptım. ;-) @yuyangJian
Arsman Ahmad

4

Bunun bir ihtiyar olduğunu biliyorum, ama biraz değer katabileceğimi düşündüm. Sunucu Çekirdeğini bir etki alanının dışında çalıştıranlarımız için (etki alanı üyeleri yalnızca özellikler / roller eklemek / kaldırmak için Sunucu Yöneticisi'ni uzaktan çalıştırabilir), komut satırlarına başvurmanız gerekir.

Powershell kullanıcıları "Install-WindowsFeature Web-Asp-Net45" yazabilir

Bu, sunucu yöneticisini kullanmaya eşdeğer olmalıdır.


4

Aynı hata iletisiyle karşılaştım .net 4.7 yüklendi.

Çözüm, ".NET Framework 4.7 Gelişmiş Hizmetler" -> "ASP.NET 4.7" öğelerinin zaten işaretli olduğu "Windows özelliğini aç veya kapat" seçeneğine gitmek için daha önce belirtilen bir gönderiyi takip etmekti.

Listede ayrıca, "Internet Information Services" ve "Uygulama Geliştirme Özellikleri" -> "ASP.NET 4.7" altbilgisi de bulunmaktadır.

Bunu etkinleştirirken, diğer özelliklerin bir bölümü etkinleştirilir ... Sadece Tamam düğmesine bastım ve sorun çözüldü. Windows özellikleri iletişim kutusunun ekran görüntüsü


Bu bir windows 10 pro sürümü olduğunu
eklemeliyim

2

Windows Server 2012 üzerinde çalışıyorum. .NET Extensibility 4.5 özelliği açık. WebDAVModule kaldırıldı. Hala ASP.NET yol '/ docs' üzerinde 500.21 hatası alıyordum.

'SkipManagedModules' değerini false olarak değiştirmek sorunu çözdü.

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

Https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI sayesinde


2

ASP.NET 4.7 "Windows özelliklerini aç veya kapat" seçeneğini ekleyerek bu sorunu çözdüm

resim açıklamasını buraya girin


1

Bu sorunu yaşadım ve Express olmayan sürümde bile aşağıdaki klasörü kaldırmanın yardımcı olduğunu buldum.

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


1

Bu hata, geçen hafta hiçbir yerden makinemdeki mevcut web sitelerini etkilemeye başladı. Burada herhangi bir öneri çalışırken hiç şansım yoktu. Sonunda WebDAV'ı IIS'den tamamen kaldırdım (Windows Özellikleri -> Internet Bilgi Hizmetleri -> World Wide Web Hizmetleri -> Ortak HTTP Özellikleri -> WebDAV Yayını). Bundan sonra iyi bir ölçüm için bir IIS sıfırlaması yaptım ve hatam sonunda çözüldü.

Yalnızca bir Windows güncellemesinin sorunu başlattığını tahmin edebilirim, ancak emin olamıyorum.


Sadece aynı sorunu vardı. IIS ayarlarım arasında geçiş yapan bazı Windows güncellemeleri yüklendi. WebDAV Publishing'i kapatmak sorunu tekrar düzeltti.
ElliotSchmelliot

0

Iis'deki "ExtensionlessUrlHandler-Integrated-4.0" türünü System.Web.DefaultHttpHandler olarak değiştirerek düzeltebilirsiniz.


0

Benim için sunucumdan WebDAV çıkarmadan bir dönüş uygulamasını neden 503 Service Unavailablekullanırken hata iletisi PUTveyaDELETE , bu yüzden yeniden yükledim. Ayrıca tamamen .NET Framework 4.5 kaldırma ve yeniden yükleme denedim ve aynı zamanda önerilen ancak boşuna olarak yeniden kayıt çalıştı.

Bireysel uygulama havuzu için WebDAV'ı devre dışı bırakarak bunu düzeltmeyi başardım, PUTveya kullanırken 'kötü modül' hatasını durdurdu DELETE.

Bireysel Uygulama Havuzu için WebDAV'ı devre dışı bırakın:

  1. Etkilenen uygulama havuzunu tıklatın
  2. WebDAV Authoring ToolsListede bul
  3. Açmak için tıklayın
  4. Disable WebDAVSağ üstteki simgesini tıklayın .

Taaaaa!

web.configDosyalarımdaki öğeleri kaldırmaya devam ettim .

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

Bu bağlantı talimatları bulduğum yer ama çok net değil.


0

Bu OP için yararlı bir çözüm olmayabilir ama aynı "hata" mesajı ile ilgilidir.

.NET 4.5 doğru yüklenmiş şekilde IIS8.5'te PHP sayfaları barındırıyoruz.

Uygulamamızın her zaman duyarlı olmasını sağlamak için önyükleme işlevini kullanıyoruz.

Bir süre sonra bu hatayı rastgele almaya başladık.

Web.config içinde: skipManagedModules öğesini true olarak koydum, -> bunu yapma!

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

Web sitesi php olmasına rağmen, çağrı için yönlendirme modüller tarafından yönetilir !!!


0

Ben de bu problemle karşılaştım. MVC4 Uygulamam IIS 8.5 yüklü bir Windows Server 2012 R2 üzerinde çalışıyor. Bu gönderilen çözümlerin hiçbiri benim için işe yaramadı ... Eksik olan çerçevelerin IIS Özellikleri üzerinden yüklenmesi sorunu çözmüş olabilir, ancak yükleme her zaman başarısız olmuştur.

Web Platform InstallerAşağıdaki paketleri kullanmak zorunda kaldım :

resim açıklamasını buraya girin


0

Paylaşılan bir barındırma sunucusunda barındırılan bir web uygulamasında bu sorunla karşı karşıya kaldım. Açıkçası IIS'ye doğrudan erişimi yoktu, bu yüzden burada önerilen birçok çözüm uygulanamadı.

Barındırma sağlayıcısının kontrol panelinde IIS ve ASP.Net için hata günlüğünü etkinleştirdim. Ve sonra bu hatanın aslında eksik bir cshtml'de yattığını bilmeliyim.


0

.NET 4.7'yi yüklemek benim için çalıştı. Daha önce yalnızca 3,5 tane yükledim.resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.