Привет сообщество Stackoverflow,
Я загружаю все контакты Exchange Outlook из одной учетной записи Outlook через EWS. К сожалению, когда адрес электронной почты контакта находится внутри нашей собственной Active Directory, он преобразуется в другой формат (/ o = ...; ou = ...; cn = ...).
Чтобы преобразовать это в обычный адрес электронной почты, я использую метод ResolveName объекта EWS-Service.
Теперь проблема: я перебираю все элементы результата FindItems, чтобы отобразить возвращенные данные в мои собственные классы C #. Внутри этого цикла мне нужно вызвать ResolveName-Method, который всегда приводит к вызову EWS. Говоря о нескольких контактах, это занимает некоторое время.
Я уже кеширую адреса, которые были разрешены ранее. Но, тем не менее, при первом же вызове, конечно же, наблюдается снижение производительности.
Вопрос очевиден: есть ли способ уменьшить разрешение имен до вызова по ews?
Заранее спасибо!
Мой звонок внутри цикла:
EmailAddress email;
if (contact.EmailAddresses.TryGetValue(EmailAddressKey.EmailAddress1, out email))
{
person.Email = GetResolvedEmailAddress(email.Address, svc);
}
Метод GetResolvedName (используется для кэширования):
private static Dictionary<String, String> ResolvedEmailAddressCache = new Dictionary<String, String>();
private static String GetResolvedEmailAddress(string address, ExchangeService svc)
{
if (ResolvedEmailAddressCache.ContainsKey(address))
return ResolvedEmailAddressCache[address];
NameResolutionCollection nd = svc.ResolveName(address);
foreach (NameResolution nm in nd)
{
if (nm.Mailbox.RoutingType == "SMTP")
{
ResolvedEmailAddressCache.Add(address, nm.Mailbox.Address);
return nm.Mailbox.Address;
}
}
ResolvedEmailAddressCache.Add(address, address);
return address;
}