EWS:Exchange Web Service。多次调用ResolveName - 性能损失(当然)。

4

大家好,我正在通过EWS从Outlook帐户加载所有Exchange Outlook联系人。不幸的是,当联系人的电子邮件地址在我们自己的Active Directory中时,它会被转换为另一种格式(/o=...;ou=...;cn=...)。为了将其转换为常规电子邮件地址,我使用EWS-Service对象的ResolveName方法。

现在的问题是:我正在循环遍历FindItems结果的所有项目,将返回的数据映射到我的C#类上。在此循环内部,我必须调用ResolveName方法,这总是导致对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个回答

3
很遗憾,不行。我能想到的唯一办法是使用LDAP解析邮件地址。这样做可能更快。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接