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.

Wildcard DNS no Windows Server 2000/2003 Plesk

Standard

Vamos entrar com a zona DNS no Windows Server 2003:

1.

Clique em “Start”, Clique em “Control Panel”, Clique em “Administrative Tools”, e depois Clique em DNS.
2.

No menu “Action”, Clique em “Connect to DNS Server”.
3.

Em “Connect to DNS Server”, Clique no próximo computador.
4.

Entre com uma entrada WildCard no computador:*.seudomínio.com.br.
5.

Selecione o “Connect to the specified computer” marcando a checkbox, e clique em Ok.

No 2000 server use:

1.

Na ferramenta de administração de DNS crie um domínio “filho” em seudomínio.com.br do tipo “*”.
2.

No domínio filho “*” crie uma entrada com o nome vazio, porém com o ip principal do site, algo com 192.168.100.100 (coloque o ip do site). Você deverá ignorar a mensagem de erro pela entrada de nome vazia.

Parser Error Message: The file ‘/MasterPage.master’ does not exist.

Standard

Parser Error Message: The file ‘/MasterPage.master’ does not exist.

Se você recebeu esta mensagem quando estava programando em Asp.Net, não se preocupe, talvez você possa aplicar a solição abaixo e “dormir” de cabeça tranqüila:

1 -> Verifique se seu script está assim:

Line 1:  <%@ page title="" language="C#" masterpagefile="~/MasterPage.master"...

Nada de pânico, substitua masterpagefile=”~/MasterPage.master” por masterpagefile=”./MasterPage.master”.