IIS7: error de infracción de bloqueo, controladores HTTP, módulos y el elemento <clear />


18

Tengo un sitio ASP.NET que usa su propio conjunto de controladores HTTP y no necesita ningún módulo.

Entonces, en IIS6, todo lo que tenía que hacer era esto en mi web.config:

<httpModules>
    <clear />
</httpModules>

Sin embargo, si intento hacer lo mismo en el system.webServerárea de IIS7, aparece un error 500 cuando intento ver el sitio, y en el administrador de IIS cuando intento ver las asignaciones de controladores, aparece un cuadro emergente con el mensaje:

Se produjo un error al realizar esta operación.

Detalles:

Nombre del archivo:

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

Número de línea: 39

Error: violación de bloqueo

La línea 39 es donde está el <clear />elemento.

Algunas búsquedas en Google me llevaron a una solución que implica ejecutar este comando:

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

... pero eso no resolvió el problema.

Respuestas:


11

Eso es por diseño. La sección de system.webServer esencialmente define IIS en sí. Si es así, no te quedará nada. En applicationHost.config, debería tener algo como esto:

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

Observe las propiedades lockItem. Debido a que hay 1 o más elementos de bloqueo, arrojará una violación de bloqueo.

Por lo tanto, debe eliminar específicamente solo los elementos que no desea de web.config, o si realmente necesita borrarlos todos y volver a agregar los suyos, en applicationHost.config elimine lockItem = "true" en cada uno de esos elementos, y asegúrese de volver a agregar suficientes para que su servidor web realmente funcione.

Editar

(Se adjunta más información de Daniel, según su solicitud. (Scott))

Esto es lo que hice en base a lo que dijo Scott:

AplicaciónHost.config abierta en% windir% \ system32 \ inetsrv \ config. Tenga en cuenta que en Windows Server 2008 de 64 bits, deberá editar el archivo con un editor de 64 bits (el Bloc de notas nativo funcionará, pero Notepad ++ no podrá encontrar el archivo). Vea aquí para más información sobre esto.

En el elemento, cambie el atributo lockItem en todos los módulos a falso.

En el archivo web.config de mi aplicación web, pude hacer lo siguiente:

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

Por supuesto, como señala Scott, esto significa que no queda ningún servidor web, así que aquí está el conjunto mínimo de módulos que necesitaba para que mis cosas vuelvan a funcionar (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" />

Además, para cualquier persona interesada, esta es la historia de fondo de por qué estoy haciendo esto.


2

Scott, ¿puedes agregar esto a tu respuesta?

Esto es lo que hice en base a lo que dijo Scott:

  1. Inaugurado applicationHost.configen %windir%\system32\inetsrv\config. Tenga en cuenta que en Windows Server 2008 de 64 bits, deberá editar el archivo con un editor de 64 bits (el Bloc de notas nativo funcionará, pero Notepad ++ no podrá encontrar el archivo). Vea aquí para más información sobre esto.

  2. En el <system.webServer>elemento, cambie el lockItematributo en todos los módulos a false.

  3. En el archivo web.config de mi aplicación web, pude hacer lo siguiente:

    <system.webServer>
       <modules>
          <clear />
       </modules>
    </system.webServer>
    
  4. Por supuesto, como señala Scott, esto significa que no queda ningún servidor web, así que aquí está el conjunto mínimo de módulos que necesitaba para que mis cosas vuelvan a funcionar (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" />

Además, para cualquier persona interesada, esta es la historia de fondo de por qué estoy haciendo esto .


Perdón por el formato en ese último bit ... por alguna razón no lo mostraría en el formato normal de "código".
Daniel Schaffer

Cosa segura. Solo lo agregué.
Scott Forsyth - MVP

2

Espero que no sea demasiado tarde para ayudar.

Tengo este problema hoy y soluciono el problema al editar el siguiente nodo XML ApplicationHost.Config:

httpErrors lockAttributes = "allowAbsolutePathsWhenDelegated, defaultPath"

Elimine ese ", defaultPath" y reinicie IIS (iisreset).

Espero que sea útil.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.