IIS7 - Errore di blocco della violazione, gestori HTTP, moduli e l'elemento <clear />


18

Ho un sito ASP.NET che utilizza il proprio set di gestori HTTP e non necessita di moduli.

Quindi, in IIS6, tutto ciò che dovevo fare era questo nel mio web.config:

<httpModules>
    <clear />
</httpModules>

Tuttavia, se provo a fare lo stesso system.webServernell'area di IIS7, ricevo un errore 500 quando provo a visualizzare il sito e in Gestione IIS quando provo a visualizzare i mapping dei gestori, ottengo una finestra popup con il messaggio:

Si è verificato un errore durante l'esecuzione di questa operazione

Dettagli:

Nome del file:

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

Numero riga: 39

Errore: blocco della violazione

La riga 39 è dove si trova l' <clear />elemento.

Alcuni googling mi hanno portato a una soluzione che prevede l'esecuzione di questo comando:

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

... ma questo non ha risolto il problema.

Risposte:


11

Questo è di progettazione. La sezione di system.webServer definisce essenzialmente IIS stesso. Se non sarai lasciato con niente. In applicationHost.config, dovresti avere qualcosa del genere:

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

Notare le proprietà lockItem. Poiché ci sono 1 o più elementi di blocco, si genera una violazione di blocco.

Quindi, o devi rimuovere specificamente solo gli elementi che non desideri da web.config, o se hai davvero bisogno di cancellarli tutti e aggiungere di nuovo i tuoi, quindi in applicationHost.config rimuovi lockItem = "true" su ognuno di questi elementi e assicurati di aggiungerne abbastanza in modo che il tuo server web funzioni davvero.

modificare

(Aggiunte ulteriori informazioni da Daniel, secondo la sua richiesta. (Scott))

Ecco cosa ho fatto sulla base di ciò che Scott ha detto:

ApplicationHost.config aperto in% windir% \ system32 \ inetsrv \ config. Si noti che in Windows Server 2008 a 64 bit, sarà necessario modificare il file con un editor a 64 bit (lo farà il Blocco note nativo, ma Notepad ++ non sarà in grado di trovare il file). Vedi qui per maggiori informazioni a riguardo.

Nell'elemento, modifica l'attributo lockItem su tutti i moduli su false.

Nel file web.config della mia applicazione Web, sono stato quindi in grado di eseguire le seguenti operazioni:

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

Naturalmente, come sottolinea Scott, questo significa che non è rimasto alcun server web, quindi ecco il set minimo di moduli di cui avevo bisogno per far funzionare di nuovo le mie cose (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" />

Inoltre, per chiunque sia interessato, ecco il retroscena sul perché lo sto facendo.


2

Scott, puoi aggiungerlo nella tua risposta?

Ecco cosa ho fatto sulla base di ciò che Scott ha detto:

  1. Aperto applicationHost.configin %windir%\system32\inetsrv\config. Si noti che in Windows Server 2008 a 64 bit, sarà necessario modificare il file con un editor a 64 bit (lo farà il Blocco note nativo, ma Notepad ++ non sarà in grado di trovare il file). Vedi qui per maggiori informazioni a riguardo.

  2. Nell'elemento <system.webServer>, modifica l' lockItemattributo su tutti i moduli in false.

  3. Nel file web.config della mia applicazione Web, sono stato quindi in grado di eseguire le seguenti operazioni:

    <system.webServer>
       <modules>
          <clear />
       </modules>
    </system.webServer>
    
  4. Naturalmente, come sottolinea Scott, questo significa che non è rimasto alcun server web, quindi ecco il set minimo di moduli di cui avevo bisogno per far funzionare di nuovo le mie cose (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" />

Inoltre, per chiunque sia interessato, ecco il retroscena sul perché lo sto facendo .


Mi dispiace per la formattazione dell'ultimo bit ... per qualche motivo non lo visualizzerebbe nel normale formato "codice".
Daniel Schaffer,

Cosa certa. L'ho appena aggiunto.
Scott Forsyth - MVP

2

Spero che non sia troppo tardi per aiutare.

Ho riscontrato questo problema oggi e risolto il problema modificando il seguente nodo XML ApplicationHost.Config:

httpErrors lockAttributes = "allowAbsolutePathsWhenDelegated, defaultPath"

Rimuovi ", defaultPath" e riavvia IIS (iisreset).

Spero sia utile.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.