Hospedagem compartilhada no IIS7. Não é possível acessar recursos com manipuladores 'StaticFileModule'

1

Eu tenho diretórios para imagens e estilos, com um arquivo Web.config (usando o Orchard). Nesse Web.config há uma linha causando um problema na minha hospedagem compartilhada (funcionando bem no WebMatrix):

  <system.webServer>
    <handlers accessPolicy="Script,Read">
      <!--
      iis7 - for any request to a file exists on disk, return it via native http module.
      accessPolicy 'Script' is to allow for a managed 404 page.
      -->
      <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />
    </handlers>
  </system.webServer>

Quando tento acessar qualquer arquivo desse diretório, recebo uma página de 500:

500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.

Quando eu excluir a linha

<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />

exibe os recursos.

Como posso corrigir esse problema sem alterar o arquivo Web.config localizado em cada diretório que contém arquivos que devem ser acessados diretamente?

    
por AlexanderMP 21.08.2011 / 12:05

1 resposta

2

Eu não acho que você pode (em hospedagem compartilhada, quero dizer).

O erro claramente diz: "Não é possível adicionar entrada de coleção duplicada do tipo 'add' com o atributo de chave exclusivo 'name' definido como 'StaticFile" . Isso significa que já existe uma entrada com name="StaticFile" em algum lugar acima na hierarquia de configuração (em outro arquivo web.config em uma pasta pai .. ou, mais provavelmente, configuração global do servidor web.

Para resolver isso, você precisa remover a linha de configuração existente primeiro. Você precisa adicionar <remove name="StaticFile" /> line na sua seção <handlers> antes de adicionar seu próprio manipulador, por exemplo:

<system.webServer>
    <handlers accessPolicy="Script,Read">
        <remove name="StaticFile" />
        <!--
        iis7 - for any request to a file exists on disk, return it via native http module.
        accessPolicy 'Script' is to allow for a managed 404 page.
        -->
        <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read"/>
    </handlers>
</system.webServer>

Se você tivesse controle total sobre o seu servidor (o que você não faz, já que você está em hospedagem compartilhada) você poderia remover StaticFile handler da configuração global do IIS ... mas é sábio ?? Adicionar a linha <remove...> é uma abordagem correta para ambos os cenários.

    
por 22.08.2011 / 01:10

Tags