Используя управляемый 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. Этот код возвращает ложь для обоих. Можно ли узнать, есть ли проблема со связью с сервером (например, время простоя сервера)? Причина этого в том, что я хочу уведомить пользователя о недействительных учетных данных, а не о простоях сервера!