Olá pessoal. Esse é meu primeiro artigo para o iMasters, espero que seja útil a todos e que seja o primeiro de muitos artigos.
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!