IIS7 - Kilit İhlali hatası, HTTP işleyicileri, modülleri ve <clear /> öğesi


18

Kendi HTTP işleyicileri kümesini kullanan ve herhangi bir modül gerektirmeyen bir ASP.NET sitem var.

IIS6'da tek yapmam gereken web.config dosyamda:

<httpModules>
    <clear />
</httpModules>

Ancak, system.webServerIIS7 alanında aynısını yapmaya çalışırsam, siteyi görüntülemeye çalıştığımda 500 hata alıyorum ve işleyici eşlemelerini görüntülemeye çalıştığımda IIS yöneticisinde şu iletiyi içeren bir açılır kutu alıyorum:

Bu işlem gerçekleştirilirken bir hata oluştu

Detaylar:

Dosya adı:

\ \ C:? \ Siteler \ TheWebSiteGoesHere \ web.config

Satır numarası: 39

Hata: Kilit ihlali

39. satır <clear />elemanın bulunduğu yerdir .

Bazı googling beni bu komutu çalıştırmayı içeren bir çözüme götürdü:

%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/modules

... ama bu sorunu çözmedi.

Yanıtlar:


11

Bu tasarım gereğidir. System.webServer bölümü aslında IIS'nin kendisini tanımlar. Eğer sen, hiçbir şeyle kalmayacaksın. ApplicationHost.config dosyasında şöyle bir şey olmalıdır:

        <modules>
            <add name="HttpCacheModule" lockItem="true" />
            <add name="DynamicCompressionModule" lockItem="true" />
            <add name="StaticCompressionModule" lockItem="true" />
            <add name="DefaultDocumentModule" lockItem="true" />
            <add name="DirectoryListingModule" lockItem="true" />
            <add name="IsapiFilterModule" lockItem="true" />
            <add name="ProtocolSupportModule" lockItem="true" />
            <add name="HttpRedirectionModule" lockItem="true" />
            <add name="StaticFileModule" lockItem="true" />
            ...

LockItem özelliklerine dikkat edin. 1 veya daha fazla kilit öğesi olduğundan, bir kilit ihlali atar.

Bu nedenle, ya yalnızca web.config'den istemediğiniz öğeleri kaldırmanız gerekir, ya da gerçekten hepsini temizleyip kendiniz eklemeniz gerekiyorsa, applicationHost.config dosyasında lockItem = "true" bu öğelerin her birini ekleyin ve web sunucunuzun gerçekten çalışması için yeterince geri eklediğinizden emin olun.

Düzenle

(Daniel'in talebi üzerine daha fazla bilgi eklendi. (Scott))

Scott'ın söylediklerine dayanarak yaptığım şey:

% Windir% \ system32 \ inetsrv \ config dizininde applicationHost.config açıldı. 64 bit Windows Server 2008 işletim sisteminde, dosyayı 64 bit düzenleyiciyle düzenlemeniz gerektiğini unutmayın (yerel Not Defteri yapacak, ancak Notepad ++ dosyayı bulamayacaktır). Bununla ilgili daha fazla bilgi için buraya bakın.

Öğede, tüm modüllerdeki lockItem özniteliğini false olarak değiştirin.

Web uygulamamın web.config dosyasında aşağıdakileri yapabildim:

<system.webServer>
   <modules>
      <clear />
   </modules>
</system.webServer>

Tabii ki, Scott'ın da belirttiği gibi, bu, hiçbir web sunucusu kalmadığı anlamına gelir, bu yüzden işimi tekrar çalıştırmak için gereken minimum modül seti (YMMV):

<add name="HttpRedirectionModule" lockItem="false" />

<add name="StaticFileModule" lockItem="false" />

<add name="CustomLoggingModule" lockItem="false" />

<add name="CustomErrorModule" lockItem="false" />

<add name="IsapiModule" lockItem="false" />

<add name="AnonymousAuthenticationModule" lockItem="false" />

Ayrıca, ilgilenen herkes için, bunu neden yaptığımın arka planı .


2

Scott, bunu cevabına ekleyebilir misin?

Scott'ın söylediklerine dayanarak yaptığım şey:

  1. Açıldı applicationHost.configiçinde %windir%\system32\inetsrv\config. 64 bit Windows Server 2008 işletim sisteminde, dosyayı 64 bit düzenleyiciyle düzenlemeniz gerektiğini unutmayın (yerel Not Defteri yapacak, ancak Notepad ++ dosyayı bulamayacaktır). Bununla ilgili daha fazla bilgi için buraya bakın .

  2. Gelen <system.webServer>eleman, değiştirmek lockItemiçin tüm modülleri niteliği false.

  3. Web uygulamamın web.config dosyasında aşağıdakileri yapabildim:

    <system.webServer>
       <modules>
          <clear />
       </modules>
    </system.webServer>
    
  4. Scott işaret ettiği gibi Tabii ki, bu araçlar, işte sol hiçbir web sunucusu modüllerinin asgari kümesi mi ben benim şeyler tekrar (YMMV) çalıştıran almak için gerekli:

    <add name="HttpRedirectionModule" lockItem="false" />

    <add name="StaticFileModule" lockItem="false" />

    <add name="CustomLoggingModule" lockItem="false" />

    <add name="CustomErrorModule" lockItem="false" />

    <add name="IsapiModule" lockItem="false" />

    <add name="AnonymousAuthenticationModule" lockItem="false" />

Ayrıca, ilgilenen herkes için, bunu neden yaptığımın arka planı .


Bu son bitin biçimlendirmesi için üzgünüm ... bir nedenden dolayı normal "kod" biçiminde görüntülenmiyordu.
Daniel Schaffer

Tabi ki. Sadece ekledim.
Scott Forsyth - MVP

2

Umarım yardım etmek için çok geç değildir.

Ben bugün bu sorunu var ve ApplicationHost.Config XML düğümü aşağıdaki de düzenleme sorunu düzeltmek:

httpErrors lockAttributes = "allowAbsolutePathsWhenDelegated, defaultPath"

Bu ", defaultPath" dosyasını kaldırın ve IIS'yi (iisreset) yeniden başlatın.

Umarım yardımcı olur.


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.