EWS: веб-служба Exchange.Вызов ResolveName несколько раз - Хит производительности (конечно) - PullRequest
3 голосов
/ 31 августа 2011

Привет сообщество 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;
    }

1 Ответ

2 голосов
/ 06 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...