Service Unavailable HTTP Error 503 – Coisas que só o IIS pode “proporcionar” a você

Standard

Das coisas que mais me irritam a mais especial é a falta de logs precisos por parte do sistema operacional. Em se tratando de Microsoft aí é que a coisa pega e pega FEIO!

Um dos erros que me fizeram gastar aproximadamente 8 horas de troubleshooting foi o erro Service Unavailable HTTP Error 503. Das coisas que mais se alegam são:

– Chaves pré-definidas junto aos serviços do IIS:
http://blogs.iis.net/webtopics/archive/2010/02/17/a-not-so-common-root-cause-for-503-service-unavailable.aspx
e
http://blogs.msdn.com/b/drnick/archive/2006/10/16/configuring-http-for-windows-vista.aspx

– Contas sem autoridade junto ao IIS:
http://social.msdn.microsoft.com/Forums/en/mdmsetup/thread/4689da4a-0452-45b6-bbb4-21ccb76d8ff9

– IIS operando com recursos de 32 bits em plataformas 64 bits:
http://forums.asp.net/p/1502755/3560390.aspx

– IIS com “loucuras” que só Deus para não duvidar:
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/55f71614-ef1b-4015-b9c8-a42c1e700c25.mspx?mfr=true

– Falaram que pode ser algum sysadmin modificando algo, por isso o downtime:
http://www.checkupdown.com/status/E503_pt.html
http://technet.microsoft.com/pt-br/library/cc736325%28WS.10%29.aspx

Caso você tenha “passado” pelos pontos acima e nenhum deles “sanou” seu problema, e além disso, você tem CERTEZA de que sua appweb está 100% depurada, debug 100% ok, tudo filé, e ainda tem CERTEZA que nenhum admin andou fazendo besteira em seu servidor, a saída pode ser alcançada da seguinte forma:

1 – Observe se existe alguma tabela corrompida em suas consultas SQL na appweb (caso consiga – detalhe, foi meu caso com BDs do tipo Mysql).
2 – Permissões em arquivos remotos ou tempo de resposta a tais chamadas.

Perceba que não é erro em nada de configuração, servidor e etc (evite loucuras como as minhas de tuning, pensando que era um erro de alto processamento, i/o e etc).

Normalmente os logs ineficientes (ex: 503 “n/a” nome do POOL_com_paranente_problema) do IIS falam que o pool de aplicativos “XXX” (nome que você deu ao pool) para rodar aplicativos DOTNET expirou/expulso/estuprou/estrangulou e etc a requisição (quer seja por POST ou GET). (na pasta logfiles dentro de windows – aonde o iis guarda seus logs)
O mais top dos erros:

1. “Connection_Dropped DefaultAppPool”
2. “Connection_Abandoned_By_AppPool DefaultAppPool”

Mesmo que você venha utilizar-se do software de debug que a MS tem, sinto muito em lhe avisar, mas será em vão utilizar-se tal ferramenta!
Siga os meus conselhos nas linhas em negrito, aquilo ali pode salvar seu dia. Use um frontend para executar suas querys e ver se não estão ali as saídas.

Ferramenta: http://support.microsoft.com/kb/919792/

You must specify a FilePath to the XML file you want to load!

Standard

Se você está recebendo mensagens de erro neste estilo aqui ó:

You must specify a FilePath to the XML file you want to load!

This message error:

[Exception: You must specify a FilePath to the XML file you want to load!]
nDeveloper.Util.Config.ConfigEditor.AllParameters() +136
nDeveloper.Util.Config.ConfigEditor.LoadConfigFile() +16
nDeveloper.Util.Config.ConfigEditor..ctor(String FilePath) +133
nDeveloper.BO.Base.Config.ConfigFile.GetValue(String Key) +40
nDeveloper.BO.Base.Domain.DataBaseConfig.GetServerType() +42
nDeveloper.BO.Base.Domain.DataBaseConfig.GetConnectionString() +61
Vsoft.iPortal.BO.DataAccess.BaseDb..ctor() +38
Vsoft.iPortal.BO.DataAccess._NoticiaDA..ctor() +24
Vsoft.iPortal.BO.DataAccess.NoticiaDA..ctor() +24
Vsoft.iPortal.BO.BusinessLogic.Noticia.ListaNoticias(Nullable`1 SecaoID, Int32 Quantidade, Nullable`1 CaracterizacaoID) +48
Start_Default.CarregaDestaques() +173
Start_Default.Page_Load(Object sender, EventArgs e) +30
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyn

Nada de dor de cabeça, há uma probabilidade enorme do seu sistema não estar deixando o IIS e o ASPNET acessarem a pasta que contém o arquivo XML.

E digo mais, é comum também de tabela receber este erro aqui:

Detalhes da Exceção: System.UnauthorizedAccessException: Acesso ao caminho “C:\Inetpub\wwwroot\caminho\dados\arquivo_problema.xml” foi negado.

Nas propriedades da pasta dados, altere as permissões da conte \ASPNET ou IUSR_MACHINENAME. A mensagem de erro fornece uma breve descrição sobre os dois casos :

“O ASP.NET não está autorizado a acessar o recurso solicitado. Recomenda-se conceder à identidade de solicitação do ASP.NET direitos de acesso ao recurso. O ASP.NET tem uma identidade de processo-base (geralmente {MACHINE}\ASPNET no IIS 5 ou Serviço de Rede no IIS 6) que é usada se o aplicativo não estiver sendo representado. Se o aplicativo estiver sendo representado através de , a identidade será o usuário anônimo (geralmente IUSR_MACHINENAME) ou o usuário de solicitação autenticado. “

WRN: Assembly binding logging is turned OFF. To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog]

Standard

Se você recebeu o ERRO:

Server Error in ‘/’ Application.
________________________________________
Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: Could not load file or assembly ‘System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.

Source Error:

Line 37:
Line 38:
Line 39:
Line 40:
Line 41:

Source File: C:\Inetpub\vhosts\littleoak.com.br\httpdocs\web.config Line: 39

Assembly Load Trace: The following information can be helpful to determine why the assembly ‘System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ could not be loaded.

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

NADA de pânico, você só precisa acessar o site da Microsoft, instalar o Asp.Net ajax e ser feliz:

http://www.microsoft.com/downloads/details.aspx?FamilyID=ca9d90fa-e8c9-42e3-aa19-08e2c027f5d6&displaylang=en

Após download instale o aplicativo em na máquina aonde o erro ocorreu (servidor) e seja feliz com o asp.net ajax.