Tratamento de erros em ASP

Asp Net

Algo que acontece com ASP e com outras linguagens …

… é o fato de, mesmo criando um excelente roteiro de testes, sempre existe uma brecha na programação que pode gerar um erro. A idéia desse artigo é permitir que o administrador do site seja informado do erro assim que o mesmo ocorrer.

 

O IIS permite redirecionar o usuário para determinadas páginas para que o mesmo não veja o erro em si, e sim uma página personalizada do erro. Nas propriedades do site, existe uma aba chamada Erros Personalizados. Localize o Erro http de código 500 e edite-o para ser redirecionado para a o caminho /500.asp. Esse arquivo 500.asp ficará na raiz do seu site.

Nesse arquivo 500.asp, podemos identificar o erro e algumas variáveis que podem ser úteis para a correção.
O método GetLastError nos retorna um objeto com o último erro de programação ocorrido no site. Segue o código para manipular o objeto de erro.

Set objError = Server.GetLastError()

Esse objeto de erro possui alguns atributos tais como:

ASPCode – Retorna o código do erro gerado pelo IIS

ASPDescription – Retorna uma descrição detalhada do erro. Alguns erros não possuem ASPDescription
Category – Categoria do erro, se foi gerado por erro na linguagem, erro em um objeto, etc.

Column – Retorna a coluna do erro
Line – Retorna a linha do erro

Description – Retorna a descrição do erro
File – Retorna o arquivo onde deu o erro

Number – Retorna o código de erro do COM
Source – Retorna o código da linha que deu o erro

Geralmente as informações mais importantes são as descrições, o arquivo e a linha que gerou o erro. Mas também é muito importante saber algumas variáveis do servidor no momento do erro. São obtidas através do REQUEST.SERVERVARIABLES.

Para saber os parâmetros (QueryString) que estão na pagina no momento do erro, basta escrever Request.ServerVariables(“QUERY_STRING”). Segue no final do artigo lista completa das variáveis.

Mas você deve estar se perguntando: como vou imprimir isso na tela que o usuário foi redirecionado sem que o mesmo tenha essas informações? Você pode adotar duas soluções: ou exibir ocultamente no código fonte como comentário JavaScript ou enviar um e-mail contendo as informações que julgar útil. Eu sugiro usar as duas soluções, para que fique fácil encontrar os erros em tempo de desenvolvimento também.

Request.ServerVariables
ALL_HTTP

Contém a lista inteira de cabeçalho fora do padrão do formulário HTTP_NAME: valor.
ALL_RAW

Similar ao ALL_HTTP, exceto por aparecer apenas quando elas são recebidas sem o prefixo HTTP e outro formato.
APPL_MD_PATH

Contém o caminho lógico do arquivo.
APPL_PHYSICAL_PATH

Contém o caminho físico do arquivo.
AUTH_PASSWORD

Uma senha informada se a autenticação básica é usada.
AUTH_TYPE

Tipo de autenticação de segurança que foi usada.
AUTH_USER

Nome do usuário autenticado.
CERT_COOKIE

Texto contendo o identificador único para a estação cliente certificada.
CERT_FLAGS

O primeiro flag (sinalizador) é configurado se uma estação cliente certificada está presente.O segundo flag é configurado se o Authority Certificate (Certificado de Autoridade) é de origem confiável.
CERT_ISSUER

Emissor de certificados de estação do cliente.
CERT_KEYSIZE

Número de bits de chave de segurança SSL
CERT_SECRETKEYSIZE

Número de bits de chave de segurança SSL para o servidor.
CERT_SERIALNUMBER

Número de série do certificado do cliente.
CER_SERVER_SUBJECT

Campo assunto para o certificado do servidor.
CERT_SUBJECT

Campo assunto para o certificado da estação do cliente.
CONTENT_LENGHT

Números de bytes informados pela estação do cliente enviado para o servidor com a requisição
CONTENT_TYPE

Tipo de requisição Feita
GATEWAY_INTERFACE

Versão CGI no formulário de número de versão/CGI
HTTPS

Contém o texto on se este é uma requisição segura e off se não é
HTTPS_KEYSIZE

Número de bits do SSL usado com a requisição.
HHTPS_SECRETKEYSIZE

Número de bits usado no término do servidor.
HTTPS_SERVER_ISSUER

Certificate Authority para o certificado do servidor.
HTTPS_SERVER_SUBJECT

Campo assunto do certificado do servidor.
HTTP_USER_AGENT

Tipo de versão do navegador bem como o sistema operacional do visitante.
HTTP_REFERER

Página em que o usuário este antes de entra na página atual, e a progressão foi feita através de um link.
HTTP_CONNECTION

Tipo de conexão entre o servidor e a estação cliente.
INSTANCE_ID

Instância do servidor WEB com o número de autenticação.
INSTANCE_META_PATH

Caminho do arquivo para esta instância específica.
LOCAL_ADDR

Endereço IP do servidor.
LOGON_USER

Se o usuário é registrado no sistema NT, este campo contém o nome do usuário.
PATH_INFO

Caminho para a página requisitada através da raiz do nome do domínio.
PATH_TRANSLATED

Caminho físico de requisição
QUERY_STRING

Qualquer dado submetido através do método GET ou após um ponto de interrogação no link.
REMOTE_ADDR

Endereço IP da máquina que está fazendo a requisição.
REMOTE_HOST

Nome traduzido do requisitante, se disponível.Se não, o campo contém o endereço IP.
REMOTE_USER

Nome do usuário, se enviado pelo visitante.
REQUEST_METHOD

Método Request usado, isto se é Post ou Get.
SCRIPT_NAME

Localização do arquivo virtual do código sendo requisitado.
SERVER_NAME

Nome do host (central) do servidor.
SERVER_PORT

Porta usada com a requisição.
SERVER_POR_SECURE

Se a requisição esta sendo feita através de uma conexão segura, então este campo contém o valor 1 se não, o campo contém o valor.
SERVER_PROTOCOL

Protocolo sendo usado com o número da versão, como HTTP/1.1.
URL

Caminho da página requisitada.
Abraço!