terça-feira, 10 de janeiro de 2017

HTTP Error 500.22 - Internal Server Error

HTTP Error 500.22 - Internal Server Error
An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.

 

image

Solução

No seu web.config, verificar que seguinte chave existe
<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

 

A adição de endereços tipo:

<validation validateIntegratedModeConfiguration="false"/>

que evitam o erro, não é apropriado para todas as circunstâncias. Tendo corrido em torno desta questão algumas vezes, espero ajudar os outros não só superar o problema, mas compreendê-lo. (Que se torna cada vez mais importante quando o IIS 6 se desvanece em mito e rumor.)

No VS 2015

Escolher Classic image nas propriedades do projeto

image

 

 

 

 

Problema:

Esse problema e a confusão em torno deste problema começaram com a introdução do ASP.NET 2.0 e do IIS 7. O IIS 6 tinha e continua a ter apenas um modo de pipeline, e é equivalente ao que o IIS 7+ chama de modo "clássico". O segundo modo de pipeline mais recente e recomendado para todos os aplicativos em execução no IIS 7+ é chamado de modo "Integrado".

Então, qual é a diferença? A principal diferença é como o ASP.NET interage com o IIS.

· O modo clássico é limitado a um pipeline do ASP.NET que não pode interagir com o pipeline IIS. Essencialmente, um pedido vem e se através da configuração do servidor foi escolhido o “IIS 6/Classic” foi escolhido e que o ASP.NET pode lidar com ele, então, em seguida o IIS liberto o pedido para ASP.NET. O significado disso pode ser obtido a partir de um exemplo. Se eu fosse autorizar o acesso a arquivos de imagem estática, eu não seria capaz de fazê-lo com um módulo ASP.NET porque o pipeline do IIS 6 irá lidar com essas solicitações e o ASP.NET nunca verá essas solicitações porque eles nunca serão entregues (claro que existem maneiras de obter todo o tipo de coisas estranhas no pipeline ASP.NET do IIS6/Classic através de coisas como wildcard mappings , caso goste desse tipo de coisa). Por outro lado, autorizar que os usuários possam aceder uma página .ASPX como por exemplo uma solicitação para Foo.aspx é trivial, mesmo no IIS6/Classic porque o IIS sempre entrega essas solicitações ao pipeline ASP.NET. No modo clássico, o ASP.NET não sabe o que não foi dito e há muito que o IIS6/Classic pode não estar dizendo.

· Modo integrado é recomendado porque manipuladores ASP.NET e módulos podem interagir diretamente com o pipeline IIS. Já não é limitado ao facto do pipeline IIS simplesmente entregar o pedido para o pipeline ASP.NET, agora ele permite que o código ASP.NET ligue diretamente para o pipeline do IIS e obtenha todas as solicitações que solicitar. Isso significa que um módulo ASP.NET não pode apenas observar solicitações para arquivos de imagem estáticos, mas pode interceptar essas solicitações e agir, negando acesso, registrando o pedido, etc.

Superando o erro:

1. Se você estiver executando um aplicativo mais antigo que foi originalmente criado para o IIS 6, talvez você mudou para um novo servidor, pode não haver absolutamente nada de errado com a execução do pool de aplicativos desse aplicativo no modo clássico. Vá em frente, você não precisa se sentir mal.

2. Caso esteja dando uma limpeza no seu site ou dando uma “cara nova” ou caso tenha instalado uma biblioteca de terceiros através. Nesse caso, é inteiramente possível que tenham sido adicionados os elementos httpHandlers ou httpModules a system.web. O resultado é o erro que você está vendo, porque validateIntegratedModeConfiguration padrões true. Agora você tem duas opções:

1. Remova os elementos httpHandlers e httpModules de system.web. Há alguns resultados possíveis a partir deste:

  • Tudo funciona bem, um resultado comum;
  • Seu aplicativo continua a reclamar, pode haver um web.config em uma pasta pai que você está herdando, considere limpar esse web.config também;
  • Você se cansa de remover o httpHandlers e httpModules que os novos pacotes continuam a acrescentar a system.web, mas é tudo o que você precisa fazer.

3. Se essas opções não funcionam ou causam mais problemas do que realmente vale a pena, então eu não vou dizer-lhe que você não pode definir validateIntegratedModeConfiguration a false, mas pelo menos você sabe o que está fazendo e por que é importante.

Bom lê:

· Alterações no ASP.NET 2.0 no IIS 7.0
· Integração do ASP.NET com o IIS 7
· Manipuladores de HTTP e módulos HTTP

0 comentários :

Enviar um comentário