Tümleşik yönetilen ardışık düzen modunda uygulanmayan bir ASP.NET ayarı algılandı


401

DotNetOpenAuth SDK-3.4.5.10201.vsix'i kurdum ve çalışamıyorum. Yerel olarak çalışır (localhost olarak çalıştırdığımda), ancak yayınlamaya çalıştığımda çalışmıyor.

Aldığım IIS hata iletisi

Hata Özeti
HTTP Hatası 500.22 - Dahili Sunucu Hatası
Tümleşik yönetilen ardışık düzen modunda uygulanmayan bir ASP.NET ayarı algılandı.

VE

Module       ConfigurationValidationModule  
Notification BeginRequest  
Handler      StaticFile  
Error Code   0x80070032  

sorunun nasıl çözüleceğine dair bazı öneriler var:

Deneyebileceğiniz şeyler:

  • Yapılandırmayı system.webServer/modulesbölüme geçirin. Bunu manuel olarak veya komut satırından AppCmd ​​kullanarak yapabilirsiniz - örneğin %SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/",. Kullanılması AppCmdbaşvurunuzu geçirmek için o Entegre modda çalışabilir ve klasik modda ve IIS önceki sürümleri üzerinde çalışmaya devam sağlayacaktır.

  • Bu hatayı yok saymanın sorun olmayacağından eminseniz, system.webServer/validation@validateIntegratedModeConfiguration false olarak ayarlanarak devre dışı bırakılabilir .

  • Alternatif olarak, uygulamayı Klasik mod uygulama havuzuna geçirin - örneğin %SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool". Bunu yalnızca uygulamanızı taşıyamazsanız yapın.
    (Uygulama yolunuza ve uygulama havuzu adınıza "Varsayılan Web Sitesi" ve "Klasik .NET AppPool" u ayarlayın)

Ancak sorun, sahibi olmadığım için ISS sunucusuna erişememem. Bunu çözmenin bir yolu var mı?

Yanıtlar:


782

2 nd seçenek istediğiniz biridir.

Şu web.configanahtarlarda, şu anahtarların bulunduğundan emin olun:

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

10
Bu, uygulamanızın güvenliğini gerçekten etkilememelidir. Kullanılmayacak bazı yapılandırma değerleriniz olduğunu söyleyen uyarıyı kapatır.
David

19
Kullanılmayacak ayarlarınız varsa, bu gerçekten aşırı bir tavsiye değildir, o zaman bunları kaldırmalısınız.
Seph

33
@Seph, bunun sağlıklı bir tavsiye olmadığını kabul etmeyin. Birçok NuGet kurulumu (örneğin DotLess), entegre moda uygulanan bölümlere girişler ekler ve ayrıca entegre olmayan mod için bu ayarı çoğaltır. Buna taşınabilirlik denir ve IIS7 / tümleşik veya klasik kullanmanıza bakılmaksızın yapılandırmanızın çalışmasını sağlar . Bu doğrulama ayarını truebırakmanın tek nedeni , entegre modda çalışmayan bir ayar eklediğinizde egzersiz tekerleklerinizi açık bırakıp IIS'nin size bağırmasını sağlamaktır. Bu deneyimsiz olanlar içindir, ancak engel olur.
Kirk Woll

5
Bu tür bir yapılandırma can sıkıcıdır. @MS: daha iyi bir yol var.
Aralık'ta yonexbat

3
Semptomları maskeleme yerine hataları düzeltmeyi tercih edenler için alternatif bir cevap gönderdim. NuGet paketleri ile ilgili olarak neden hala IIS 6 / Classic'i hedefliyoruz?
Jeremy Cook

104

Ekleme <validation validateIntegratedModeConfiguration="false"/>semptomu giderir, ancak her koşul için uygun değildir. Bu sorunu birkaç kez geçirdikten sonra, başkalarına sadece sorunun üstesinden gelmekle kalmayıp, aynı zamanda anlamalarına yardımcı olmayı umuyorum. (IIS 6, efsaneye ve söylentilere dönüştükçe giderek daha önemli hale gelir.)

Arka fon:

Bu sorun ve etrafındaki karışıklık ASP.NET 2.0 ve IIS 7'nin tanıtılmasıyla başladı. IIS 6'da yalnızca bir ardışık düzen modu vardı ve olmaya devam ediyor ve IIS 7 + 'nın "Klasik" mod olarak adlandırdığı duruma eşdeğer. IIS 7+ üzerinde çalışan tüm uygulamalar için ikinci, daha yeni ve önerilen ardışık düzen moduna "Tümleşik" mod adı verilir.

Peki, fark nedir? Temel fark ASP.NET'in IIS ile etkileşimi.

  • Klasik modIIS boru hattıyla etkileşim kuramayan bir ASP.NET kanalıyla sınırlıdır. Esasen bir istek gelir ve IIS 6 / Classic'e sunucu yapılandırması aracılığıyla ASP.NET'in bunu işleyebileceği söylenirse, IIS, ASP.NET'e isteği iptal eder ve devam eder. Bunun önemi bir örnekten çıkarılabilir. Statik görüntü dosyalarına erişim yetkisi verirsem, bir ASP.NET modülü ile bunu yapamazdım çünkü IIS 6 boru hattı bu istekleri kendisi işleyecek ve ASP.NET bu istekleri hiçbir zaman teslim edilmediğinden asla görmeyecek * Öte yandan, IIS'nin bu istekleri her zaman ASP.NET kanalına ilettiği için, Foo.aspx isteği gibi bir .ASPX sayfasına hangi kullanıcıların erişebileceğini yetkilendirmek önemsizdir. Klasik modda ASP.NET neye sahip olduğunu bilmiyor '

  • ASP.NET işleyicileri ve modülleri IIS kanalıyla doğrudan etkileşim kurabildiği için tümleşik mod önerilir. IIS boru hattı artık ASP.NET boru hattına yapılan isteği dağıtmakla kalmıyor, artık ASP.NET kodunun doğrudan IIS boru hattına ve onu izleyen tüm isteklere bağlanmasına izin veriyor. Bu, bir ASP.NET modülünün yalnızca statik görüntü dosyalarına yönelik istekleri gözlemleyemeyeceği, aynı zamanda bu istekleri kesebileceği ve erişimi reddederek, isteği günlüğe kaydederek vb.

Hatayı aşmak:

  1. Başlangıçta IIS 6 için oluşturulmuş eski bir uygulamayı çalıştırıyorsanız, belki de yeni bir sunucuya taşıdınız, o uygulamanın uygulama havuzunu Klasik modda çalıştırırken kesinlikle hiçbir sorun olmayabilir. Devam et, kötü hissetmene gerek yok.
  2. Sonra tekrar belki uygulamanıza bir yüz asansörü veriyorsunuz veya NuGet aracılığıyla manuel olarak veya başka bir yolla üçüncü taraf bir kütüphane yükleyene kadar iyi çalışıyor. Bu durumda tamamen mümkündür httpHandlersveya httpModuleseklenmiştir system.web. Sonuç, validateIntegratedModeConfigurationvarsayılanlar nedeniyle gördüğünüz hatadır true. Şimdi iki seçeneğiniz var:

    1. httpHandlersVe httpModulesöğelerini öğesinden kaldırın system.web. Bundan birkaç olası sonuç var:
      • Her şey iyi çalışıyor, ortak bir sonuç;
      • Başvurunuz şikayet etmeye devam ediyor, devralınmakta olduğunuz bir üst klasörde bir web.config olabilir, bu web.config dosyasını da temizlemeyi düşünün;
      • NuGet paketlerini eklemeye devam etmekten bıktınız httpHandlersve hey, ihtiyacınız olanı yapın.httpModulessystem.web
  3. Bu seçenekler değil işi yapmak veya o zaman ayarlayamıyor söylemeye gitmiyorum değer daha fazla sorun varsa validateIntegratedModeConfigurationiçin false, ama en azından sen ne yaptığını biliyorum ve neden önemlidir?.

İyi okumalar:

* Tabii ki, IIS 6 / Classic'ten ASP.NET boru hattına, joker karakter eşlemeleri gibi büyülerle her türlü garip şeyi almanın yolları vardır .


Sadece +1 çözümü, sorunun cevabı değil, mükemmel bir cevap olan açıklama ile çözümdür. Bu nedir ve neden değiştirmemiz gerekiyor, @Jeremy Cook'un verdiği bu cevap soruları.
Rikin Patel

Bu açıklama, IIS 7.5'te Tümleşik modda barındırılan küçük bir sınama sitesi için sorunu gidermeme neden oldu. Yeni bir MVC projesi oluşturduğumda, Web.config dosyasına httpModule, Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule ekledi. Bunun nedeni, yeni bir ASP.NET Web Uygulama uygulaması oluştururken "Projeye Uygulama Trendleri Ekle" seçeneğini işaretli bırakmamdı. HttpModule'u Web.config'den kaldırdığımda site hatasız çalıştı. ValidateIntegratedModeConfiguration öğesini false olarak ayarlamak işe yaradı, ancak bu sadece bandaid bir yaklaşımdı.
iCode

2
Tümleşik yönetilen ardışık düzen modunda uygulanmayan bir ASP.NET ayarı algılandı. Bu yine başka bir işe yaramaz Microsoft hata mesajıdır. ASP.net binlerce ayar vardır, ancak Microsoft hata metninde hataya neden olanı dahil etmeyi düşünmüyordu. MS, mühendisler yerine pazarlamacılar tarafından işletilmektedir, bu nedenle yakında bir şeylerin iyileşmesini beklemeyin. :-(
Paul McCarthy

35

Hala HTTP Modülünü kullanmanız gerekiyorsa, onu (.NET 4.0 çerçevesi) aşağıdaki gibi yapılandırmanız gerekir:

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
       <add name="MyModule" type="[Namespace].[Class], [assembly]"/>
   </modules>
   <validation validateIntegratedModeConfiguration="false"/>
</system.webServer>

2
System.web HttpModules özelliği ASP 3.5 veya öncesi için olduğunu düşünüyorum. ASP 4 veya üzeri sistemlerde modülleri kullanın. Web sunucusu
Trio Cheung

1
@HoyCheung aslında System.web / httpModules veya system.webServer / modules kullanıp kullanmayacağına karar veren .Net'in hangi sürümünü değil, Integrated veya Classic ardışık düzen kullanma konusudur.
Pauli Østerø

29

Bu sorunla karşılaştım ama farklı bir düzeltme yaptım. Bu güncelleme katılan Control Panel>Administrative Tools>IIS Managerve benim App sitenin Yönetilen Boru Hattı geri alma Integratediçin Classic.


3
Kabul etti - bu sadece hatayı gizlemek yerine daha iyi bir seçenek! Doğru Uygulama Havuzunu kullandığınızdan emin olun - Klasik Entegre değil
Swomble

1
Visual studio 2012 kullanıyorum, uygulama havuzunu klasik olarak nasıl değiştirebilirim?

10
Integrated Pipeline'da bulunan tüm yeni özellikleri kullanmak istiyorsanız bu iyi bir çözüm değildir. Bu, bir sorun nedeniyle 4.0'dan .NET 2.0'a geri dönme demek gibidir.
Trevor de Koekkoek

Bunu IIS Yöneticisi'nde yapmak Application Poolsiçin soldaki ağaca gidin , değiştirmek istediğiniz havuzu çift tıklatın ve ardışık düzen modunu seçin.
Steve Smith

8

IIS kimlik doğrulamanızda çakışma olup olmadığını kontrol edin. yani anonim kimlik doğrulamasını etkinleştirirsiniz ve ASP.NET kimliğe bürünme de hataya neden olabilir.


5

Web.config dosyasında şu anahtarların bulunduğundan emin olun:

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

Sıra işaretledikçe Asp.Net Impresonation = Devre Dışı olarak IIS Sitesi authetication


3

Bu sorunla karşılaştım ve @Jeremy Cook'un cevabından esinlenerek, heck'in IIS 7 Entegre modunun web.config'im gibi olmamasına neyin neden olduğunu bulmak için mermiyi ısırdım. İşte benim senaryom:

  1. Web API'sı (sürüm 4.0.030506.0 eski adıyla)
  2. .NET 4.0
  3. Web API için Özellik Yönlendirme 3.5.6 [spoiler uyarısı: bu adamdı!]

(Maalesef) .NET 4 kullanmak zorunda olduğu bir projede öznitelik yönlendirme kullanmak istedim ve bu nedenle Web API 2.2 (.NET 4.5 gerekir) kullanamadı. NuGet paketinin anlamı, bu bölümü aşağıdaki <system.web>bölüme ekledi :

<system.web>
<httpHandlers>
      <add verb="*" path="routes.axd" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" />
    </httpHandlers>
</system.web>

[Anlamını söylüyorum, çünkü bu bölüm IIS'nin eski sürümlerinde gereklidir]

Bu bölümü kaldırdığımda HTTP 500.23'ü geçtim !!

Özet: Jeremy'nin, "semptomu maskelemek" yerine işlerin neden işe yaramadığını anlamanın önemli olduğunu söylüyorum. Semptomu maskelemek zorunda olsanız bile, ne yaptığınızı (ve nedenini) biliyorsunuz :-)


Teşekkürler. Api Controller eklentisi NuGet paketi de dahil olmak üzere AttributeRouting'i ekledim ve web.config dosyasında belirttiğiniz bölümü kaldırmak sorunu çözdü. Ancak, MVC web uygulamam zaten .NET framework 4.5 kullanıyor olduğu için biraz endişeliyim.
Robert Oschler

2
@RobertOschler. NET 4.5 kullanıyorsanız, zaten AFAIK yerleşik öznitelik yönlendirme var - bu NuGet gerekmez?
Sudhanshu Mishra

Teşekkürler ve saçmalık. Bugün NuGet çalıştıran AttributeRouting paketini almak için birkaç saat geçti. Ben çıkardı ve çalışması için eklediğim tüm kod "düzeltmeleri" undid ve GET () özniteliği için Web API 2 Route () özniteliği yerine. Harika çalıştı. Bu paketlerde bize yardımcı olmak için bugünlerde gerçekten uzman bir sisteme ihtiyacımız var.
Robert Oschler

2

Bu benim için çalıştı:

  1. Orijinal olarak oluşturulan siteyi silin.
  2. Siteyi IIS'de yeniden oluşturun
  3. Temiz çözüm
  4. Yapı çözümü

Siteyi ilk oluşturduğumda bir şeyler güneye gitti gibi görünüyor. Hataya neyin neden olduğunu bilmeden "Makinenizi yeniden başlatın, ardından pencereleri yeniden yükleyin" benzeri çözümlerden nefret ediyorum. Ama bu benim için çalıştı. Hızlı ve basit. Umarım başka birine yardımcı olur.


0

Benim durumumda web.config dosyasında başvurulan bin klasöründe dll eksikti. Yani web.config dosyasında herhangi bir ayar kullanıp kullanmadığınızı kontrol edin, fakat aslında dll'niz yok.

Teşekkürler


0

Bu hatayı çözmem birkaç saat sürdü, çünkü burada bu hata hakkında bulduğum ayarların hepsi aynıydı, ancak yine de işe yaramadı. Sorun, web servisimde dosyanın WinCE cihazına gönderilmesi gereken bir klasör vardı, bu klasörü Classic.NetAppPool ile bir uygulamaya dönüştürdükten sonra çalışmaya başladı.


0

Aşağıdaki adım sorunumu çözdü:

CMDYönetici Ayrıcalıklarıyla İstemi Aç .

Çalıştırmak : iisreset.

Bu yardımcı olur umarım.


-1

Yerel yöntem Hata mı?

görüntü


7
Ne yaptığınızı gerçekten bilmiyorsanız bu ayarı değiştirmeyin. Bu neredeyse hiçbir zaman doğru cevap değildir.
NickG
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.