Manipulação de mensagens de erro de Descoberta Automática

Saiba mais sobre os diferentes tipos de erros de descoberta automática e o que fazer com eles.

A descoberta automática permite que seus aplicativos recuperem as informações de configuração automaticamente e elas funcionam muito bem. No entanto, as coisas nem sempre vão de acordo com o plano. Vamos examinar os erros comuns que podem ocorrer e como você pode lidar com eles para minimizar a necessidade de solicitar que o usuário configure manualmente seu cliente.

Erros de status HTTP

O primeiro tipo de erro que você pode encontrar ao enviar solicitações de descoberta automática é o status HTTP. Se o status HTTP em sua resposta for diferente de 200 (OK), a carga de resposta não conterá a resposta de descoberta automática que você estava procurando. Para simplificar, podemos agrupar códigos de status não 200 em três categorias.

Tabela 1. Códigos de status de HTTP

Código de status Tipo de erro Para manipular...
301 ou 302
Erro de redirecionamento
Reenviar sua solicitação para o URI contido no cabeçalho de resposta HTTP "Local". Para obter detalhes, consulte Tratamento de erros de redirecionamento.
401
Erro não autorizado
Como o processo de Descoberta Automática envolve a tentativa de várias URLs potenciais, você pode obter isso em uma URL apenas para que a próxima aceite suas credenciais. Por esse motivo, você não deve considerar um único erro 401 para indicar que as credenciais são inválidas. No entanto, se você receber 401 erros de várias URLs, talvez queira solicitar que o usuário reentere sua senha (se possível).
Qualquer outro status que não seja 200
Erro de ponto de extremidade de descoberta automática inválida
Considere a URL que retorna qualquer outro código de status que não seja 200 como inválido e continue tentando a próxima URL em sua lista.

Erros de descoberta automática

Mesmo que você obtenha um código de status 200 (OK) depois de enviar uma solicitação de Descoberta Automática, isso não significa que o servidor enviou as informações necessárias. O status 200 significa apenas que você tem uma resposta de descoberta automática e essa resposta pode conter um erro dentro da carga. O local das informações de erro difere dependendo se o formato é SOAP ou POX.

Erros de descoberta automática soap

Para soap autodiscover, a resposta pode conter um ou mais elementos SOAP (ErrorCode), em lugares diferentes. Normalmente, você pode esperar um como um elemento filho do elemento DE RESPOSTA (SOAP) e um como filho de cada elemento UserResponse (SOAP) na resposta. Você também pode encontrar um como filho de um elemento USERSettingError (SOAP), se um estiver presente. O contexto do erro depende de onde o elemento ErrorCode está localizado, da seguinte maneira:

  • Como um elemento filho do elemento Response , o elemento ErrorCode representa um erro que se aplica a toda a solicitação.

  • Como filho do elemento UserResponse , ele representa um erro que se aplica apenas a esse usuário específico.

  • Como filho de um elemento UserSettingError , ele representa um erro que se aplica a uma configuração específica que foi solicitada.

Vamos dar uma olhada em um exemplo de resposta. Neste exemplo, o elemento ErrorCode no elemento Response tem um valor de "NoError", que indica sucesso geral. No entanto, o elemento ErrorCode no elemento UserResponse tem um valor de "RedirectAddress", que indica que ocorreu um erro para esse usuário específico.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">https://schemas.microsoft.com/exchange/2010/Autodiscover/Autodiscover/GetUserSettingsResponse</a:Action>
    <h:ServerVersionInfo xmlns:h="https://schemas.microsoft.com/exchange/2010/Autodiscover" 
        xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <h:MajorVersion>14</h:MajorVersion>
      <h:MinorVersion>3</h:MinorVersion>
      <h:MajorBuildNumber>136</h:MajorBuildNumber>
      <h:MinorBuildNumber>1</h:MinorBuildNumber>
      <h:Version>Exchange2010_SP2</h:Version>
    </h:ServerVersionInfo>
  </s:Header>
  <s:Body>
    <GetUserSettingsResponseMessage xmlns="https://schemas.microsoft.com/exchange/2010/Autodiscover">
      <Response xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <ErrorCode>NoError</ErrorCode>
        <ErrorMessage />
        <UserResponses>
          <UserResponse>
            <ErrorCode>RedirectAddress</ErrorCode>
            <ErrorMessage>Redirection address.</ErrorMessage>
            <RedirectTarget>elvin@mail.contoso.com</RedirectTarget>
            <UserSettingErrors />
            <UserSettings />
          </UserResponse>
        </UserResponses>
      </Response>
    </GetUserSettingsResponseMessage>
  </s:Body>
</s:Envelope>

O artigo ErrorCode (SOAP) contém uma lista completa de possíveis erros. A maioria delas indica um erro irrecuperável, mas alguns justificam o tratamento especial.

Tabela 2. Valores soap autodisover ErrorCode

Valor ErrorCode Para manipular...
RedirecionamentoAddress
Reiniciar o Autodiscover com um novo endereço de email com o endereço de email no elemento SOAP (RedirectTarget ).
Redirecturl
Reenviando sua solicitação para uma nova URL para a URL no elemento RedirectTarget .
ServerBusy
Repita essa URL após um pequeno atraso. Você pode aguardar um tempo definido ou simplesmente mover essa URL para o final de sua lista de URLs para tentar. Se você receber esse erro várias vezes de uma URL, deverá considerar a URL inválida.

Erros de descoberta automática pox

O serviço pox autodiscover relata erros um pouco diferente. Erros não recuperáveis estão contidos no elemento POX (Erro ). O artigo PoX (ErrorCode) contém uma lista completa de possíveis códigos de erro.

Os erros de redirecionamento estão contidos no elemento POX (Ação ). Qualquer valor do elemento Action diferente de "configurações" indica um erro de redirecionamento.

Tabela 3. Valores de ErrorCode de autodisover pox

Valor da ação Para manipular...
redirectAddr
Reiniciar o Autodiscover com um novo endereço de email com o endereço de email no elemento POX (RedirectAddr ).
redirectUrl
Reenviando sua solicitação para uma nova URL para a URL no elemento POX (RedirectUrl ).

Neste exemplo, o elemento Action tem um valor de "redirectAddr", que indica que uma nova solicitação deve ser enviada com o novo endereço de email contido no elemento RedirectAddr .

<?xml version="1.0" encoding="utf-8"?>
<Autodiscover xmlns="https://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
  <Response xmlns="https://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
    <Account>
      <Action>redirectAddr</Action>
      <RedirectAddr>elvin@mail.contoso.com</RedirectAddr>
    </Account>
  </Response>
</Autodiscover>

Manipulando erros de redirecionamento

Você pode lidar com cenários de erro de redirecionamento de duas maneiras:

  • Reiniciando Autodiscover com um novo endereço de email.

  • Ao reenviar sua solicitação para uma nova URL.

Ambos os cenários exigem alguma validação antes de prosseguir.

Reiniciar o Autodiscover com um novo endereço de email

Ao obter um novo endereço de email em uma resposta de redirecionamento de descoberta automática, primeiro verifique se o novo endereço de email fornecido na resposta de erro de redirecionamento não é o mesmo endereço que você enviou na solicitação que resultou no erro. Se for, você não deve reiniciar o Autodiscover e, em vez disso, considerar a URL que gerou a resposta como inválida.

Se o novo endereço de email for diferente, descarte sua lista existente de URLs potenciais do ponto de extremidade autodiscover e gere uma nova lista com base no novo endereço de email.

Reenviando sua solicitação para uma nova URL

Quando você obtém uma nova URL em uma resposta de redirecionamento de autodiscover, primeiro você deve validar a URL da seguinte maneira:

  • Verifique se a URL é uma URL HTTPS.

  • Verifique se você não recebeu um erro dessa URL com o endereço de email atual antes.

  • Se aplicável ao seu aplicativo, informe o usuário sobre o redirecionamento e obtenha sua permissão para seguir o redirecionamento.

  • Envie uma solicitação para a URL e verifique se o certificado SSL apresentado pelo servidor é válido.

Se a URL passar pela validação, reenvia a solicitação para essa nova URL.

Confira também