Как проверить учетные данные Exchange и связь с сервером Exchange с помощью управляемого API EWS?

Используя управляемый API 2.0 Exchange EWS, вот метод, который я использую для проверки учетных данных:

public static bool TestExchangeConnetion(UserSettingDTO credential, ServerSettingDTO serverSetting)
    {
        bool authenticated = false;
        Microsoft.Exchange.WebServices.Data.ExchangeService service;


        service = new ExchangeService((ExchangeVersion)Enum.Parse(typeof(ExchangeVersion), serverSetting.ExchangeVer));
        service.Url = new Uri(serverSetting.ExchangeURL);


        service.Credentials = new NetworkCredential(credential.ExchangeUsername, credential.ExchangePassword);

        try
        {
            //make a call to ensure that credentials are working
            AlternateIdBase response = service.ConvertId(new AlternateId(IdFormat.EwsId, "Placeholder", credential.ExchangeUsername), IdFormat.EwsId);
        }
        // The credentials were authenticated. We expect this exception since we are providing intentional bad data for ConvertId
        catch (ServiceResponseException)
        {
            authenticated = true;
        }

        // The credentials were not authenticated.
        catch (ServiceRequestException)
        {
            authenticated = false;
        }
        catch (Exception)
        {
            authenticated = false;
        }

        return authenticated;
    }

Это прекрасно работает для проверки учетных данных, но я ищу способ различать недействительные учетные данные и время простоя сервера Exchange. Этот код возвращает ложь для обоих. Можно ли узнать, есть ли проблема со связью с сервером (например, время простоя сервера)? Причина этого в том, что я хочу уведомить пользователя о недействительных учетных данных, а не о простоях сервера!


person Ryan    schedule 27.04.2016    source источник


Ответы (1)


EWS — это просто веб-служба, которая работает в IIS (поэтому IIS следит за аутентификацией), если вы просто хотите проверить учетные данные, почему бы вам просто не сделать запрос Get к файлу services.wsdl или Get на конечной точке автообнаружения на CAS-сервере. Если учетные данные неверны, это должно вернуть 401 в этот момент.

Ура Глен

person Glen Scales    schedule 27.04.2016
comment
Вопрос в том, как бы вы различали время простоя сервера и недействительные учетные данные? потому что при использовании моего кода оба возвращаются не авторизованными. - person Ryan; 27.04.2016
comment
Если вы получаете 401, то ваши учетные данные не годятся, с учетными данными не думайте с точки зрения Exchange, который вы просто аутентифицируете. Дайте определение времени простоя? если CAS не работает, вы не получите ответа, если сервер почтовых ящиков не работает, но CAS работает, вы должны получить ошибку 500. Если оба сервера работают, но хранилище не подключено, вы получите определенную ошибку EWS. Вам нужно действительно указать, если это просто учетные данные, которые вы можете проверить за пределами EWS. - person Glen Scales; 27.04.2016