IIS7 - Erro de Violação de Bloqueio, manipuladores HTTP, módulos e a limpeza / elemento

17

Eu tenho um site ASP.NET que usa seu próprio conjunto de manipuladores HTTP e não precisa de nenhum módulo.

Então, no IIS6, tudo que eu tinha que fazer era isso no meu web.config:

<httpModules>
    <clear />
</httpModules>

No entanto, se eu tentar fazer o mesmo na área system.webServer do IIS7, recebo um erro 500 quando tento exibir o site, e no gerenciador do IIS quando tento visualizar os mapeamentos do manipulador, recebo um caixa pop-up com a mensagem:

There was an error while performing this operation

Details:

Filename:

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

Line number: 39

Error: Lock violation

A linha 39 é onde o elemento <clear /> é.

Alguns googling me levaram a uma solução envolvendo a execução desse comando:

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

... mas isso não resolveu o problema.

    
por Daniel Schaffer 08.10.2009 / 00:44

4 respostas

11

Isso é por design. A seção do system.webServer essencialmente define o próprio IIS. Se você, você não ficará com nada. Em applicationHost.config, você deve ter algo assim:

        <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 as propriedades lockItem. Porque há 1 ou mais itens de bloqueio, irá lançar uma violação de bloqueio.

Então, você precisa especificamente remover apenas os itens que você não quer do web.config, ou se você realmente precisa limpá-los e adicionar seus próprios, então no applicationHost.config remova o lockItem=" true "em cada um desses elementos, e certifique-se de adicionar o suficiente deles de volta para que seu servidor realmente funcione.

Editar

(Acrescentou mais informações de Daniel, por seu pedido. (Scott))

Aqui está o que eu fiz com base no que Scott disse:

Abra o applicationHost.config em% windir% \ system32 \ inetsrv \ config. Observe que no Windows Server 2008 de 64 bits, você precisará editar o arquivo com um editor de 64 bits (o Bloco de Notas nativo fará isso, mas o Notepad ++ não conseguirá localizar o arquivo). Veja aqui para mais informações sobre isso.

No elemento, altere o atributo lockItem em todos os módulos para false.

No arquivo web.config do meu aplicativo da Web, foi possível fazer o seguinte:

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

É claro que, como Scott aponta, isso significa que não resta nenhum servidor web, então aqui está o conjunto mínimo de módulos que eu precisava para fazer minhas coisas rodarem novamente (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" />

Além disso, para todos os interessados, veja a história de fundo sobre o motivo pelo qual eu estou fazendo isso.

    
por 09.10.2009 / 05:03
2

Scott, você pode acrescentar isso em sua resposta?

Aqui está o que eu fiz com base no que Scott disse:

  1. Aberto em applicationHost.config em %windir%\system32\inetsrv\config . Observe que no Windows Server 2008 de 64 bits, você precisará editar o arquivo com um editor de 64 bits (o Bloco de Notas nativo fará isso, mas o Notepad ++ não conseguirá localizar o arquivo). Consulte aqui para obter mais informações sobre isso.

  2. No elemento <system.webServer> , altere o atributo lockItem em todos os módulos para false .

  3. No arquivo web.config do meu aplicativo da Web, foi possível fazer o seguinte:

    <system.webServer>
       <modules>
          <clear />
       </modules>
    </system.webServer>
    
  4. Naturalmente, como Scott aponta, isso significa que não resta nenhum servidor web, então aqui está o conjunto mínimo de módulos I necessários para colocar minhas coisas em execução novamente (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" />

Além disso, para qualquer pessoa interessada, aqui está a história de como estou fazendo isso .

    
por 09.10.2009 / 18:00
2

Espero que não seja tarde demais para ajudar.

Eu recebi este problema hoje e corrijo o problema de edição do seguinte nó XML do ApplicationHost.Config:

link

Remova isso ", defaultPath" e reinicie o IIS (iisreset).

Espero que seja útil.

    
por 04.03.2011 / 07:14
0

Tente remover o seu web.config original (criar backup) e depois de fazer alterações via IIS (ele criará novo web.config) restaure as alterações originais. Caso você esteja configurando ERROS HTTP, siga este link

    
por 27.06.2017 / 13:01