Поделиться через


Обработка сообщений об ошибках службы автообнаружения

Узнайте о различных типах ошибок автообнаружения и о том, что с ними делать.

Функция автообнаружения позволяет приложениям автоматически получать сведения о конфигурации и работать отлично. Тем не менее, все не всегда идет по плану. Давайте рассмотрим распространенные ошибки, которые могут возникнуть, и способы их обработки, чтобы свести к минимуму необходимость запроса пользователя на настройку клиента вручную.

Ошибки состояния HTTP

Первый тип ошибки, который может возникнуть при отправке запросов автообнаружения, — состояние HTTP. Если состояние HTTP в ответе отличается от 200 (ОК), полезные данные ответа не содержат нужный ответ автообнаружения. Для простоты можно сгруппировать коды состояния, отличные от 200, в три категории.

Таблица 1. Коды состояния HTTP

Код состояния Тип ошибки Для обработки...
301 или 302
Ошибка перенаправления
Повторно отправьте запрос на универсальный код ресурса (URI), содержащийся в заголовке HTTP-ответа Location. Дополнительные сведения см. в разделе Обработка ошибок перенаправления.
401
Ошибка несанкционированного доступа
Так как процесс автообнаружения включает в себя попытку нескольких потенциальных URL-адресов, вы можете получить его только по одному URL-адресу, чтобы следующий принял ваши учетные данные. По этой причине не следует учитывать одну ошибку 401, чтобы указать, что учетные данные недопустимы. Однако при возникновении ошибок 401 из нескольких URL-адресов может потребоваться предложить пользователю повторно ввести пароль (если это возможно).
Любое другое состояние, отличное от 200
Недопустимая ошибка конечной точки автообнаружения
Подумайте, что URL-адрес, возвращающий любой другой код состояния, отличный от 200, является недопустимым, и продолжайте пробовать следующий URL-адрес в списке.

Ошибки автообнаружения

Даже если после отправки запроса автообнаружения вы получите код состояния 200 (ОК), это не означает, что сервер отправил необходимые сведения. Состояние 200 означает только то, что у вас есть ответ автообнаружения, и этот ответ может содержать ошибку в полезных данных. Расположение сведений об ошибке зависит от формата SOAP или POX.

Ошибки автообнаружения SOAP

Для автообнаружения SOAP ответ может содержать один или несколько элементов ErrorCode (SOAP) в разных местах. Как правило, можно ожидать один в качестве дочернего элемента элемента Response (SOAP) и один в качестве дочернего элемента каждого элемента UserResponse (SOAP) в ответе. Вы также можете столкнуться с одним из них в качестве дочернего элемента UserSettingError (SOAP), если он присутствует. Контекст ошибки зависит от расположения элемента ErrorCode следующим образом:

  • Как дочерний элемент элемента Response элемент ErrorCode представляет ошибку, которая применяется ко всему запросу.

  • Дочерний элемент элемента UserResponse представляет ошибку, которая применяется только к конкретному пользователю.

  • Будучи дочерним элементом элемента UserSettingError , он представляет ошибку, которая применяется к определенному запрошенном параметру.

Рассмотрим пример ответа. В этом примере элемент ErrorCode в элементе Response имеет значение NoError, что указывает на общий успех. Однако элемент ErrorCode в элементе UserResponse имеет значение RedirectAddress, указывающее, что произошла ошибка для этого конкретного пользователя.

<?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>

Статья ErrorCode (SOAP) содержит полный список возможных ошибок. Большинство из них указывают на неустранимую ошибку, но некоторые из них требуют специальной обработки.

Табл. 2. Значения кода ошибок для автоматического различения SOAP

Значение ErrorCode Для обработки...
RedirectAddress
Перезапуск автообнаружения с новым адресом электронной почты с адресом электронной почты в элементе RedirectTarget (SOAP).
RedirectUrl
Повторная отправка запроса на новый URL-адрес в элементе RedirectTarget .
ServerBusy
Повторите попытку по этому URL-адресу после небольшой задержки. Вы можете подождать определенное время или просто переместить этот URL-адрес в конец списка URL-адресов, чтобы попробовать. Если эта ошибка появляется несколько раз из URL-адреса, следует считать url-адрес недопустимым.

Ошибки автообнаружения POX

Служба автообнаружения POX сообщает об ошибках немного иначе. Невосстановимые ошибки содержатся в элементе Error (POX). В статье ErrorCode (POX) содержится полный список возможных кодов ошибок.

Ошибки перенаправления содержатся в элементе Action (POX). Любое значение элемента Action , отличное от "settings", указывает на ошибку перенаправления.

Табл. 3. Значения кода ошибки авторазверки POX

Значение действия Для обработки...
redirectAddr
Перезапуск автообнаружения с новым адресом электронной почты с адресом электронной почты в элементе RedirectAddr (POX).
redirectUrl
Повторная отправка запроса на новый URL-адрес в элементе RedirectUrl (POX).

В этом примере элемент Action имеет значение redirectAddr, указывающее, что новый запрос должен быть отправлен с новым адресом электронной почты, содержащимся в элементе 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>

Обработка ошибок перенаправления

Сценарии ошибок перенаправления можно обрабатывать двумя способами:

  • Путем перезапуска автообнаружения с новым адресом электронной почты.

  • Повторно отправьте запрос на новый URL-адрес.

Оба сценария требуют некоторой проверки перед продолжением.

Перезапуск автообнаружения с новым адресом электронной почты

При получении нового адреса электронной почты в ответе на перенаправление автообнаружения сначала убедитесь, что новый адрес электронной почты, указанный в ответе на ошибку перенаправления, не совпадает с адресом, отправленным в запросе, который привел к ошибке. Если это так, не следует перезапускать автообнаружение и вместо этого считать, что URL-адрес, создающий ответ, будет недопустимым.

Если новый адрес электронной почты отличается, удалите существующий список потенциальных URL-адресов конечных точек автообнаружения и создайте новый список на основе нового адреса электронной почты.

Повторная отправка запроса на новый URL-адрес

При получении нового URL-адреса в ответе на перенаправление автообнаружения сначала необходимо проверить URL-адрес следующим образом:

  • Убедитесь, что URL-адрес является URL-адресом HTTPS.

  • Убедитесь, что вы не получили сообщение об ошибке из этого URL-адреса с текущим адресом электронной почты.

  • Если применимо к вашему приложению, сообщите пользователю о перенаправлении и получите разрешение на переход на перенаправление.

  • Отправьте запрос на URL-адрес и убедитесь, что SSL-сертификат, предоставленный сервером, действителен.

Если URL-адрес проходит проверку, повторно отправьте запрос на этот новый URL-адрес.

См. также