c# - EWS : Exchange Web Service. 多次调用 ResolveName - 性能命中(当然)

标签 c# performance exchangewebservices

您好 Stackoverflow 社区,

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

现在的问题是:我循环遍历 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;
    }

最佳答案

不幸的是,没有。我唯一能想到的就是使用 LDAP 解析邮件地址。这可能更快。

关于c# - EWS : Exchange Web Service. 多次调用 ResolveName - 性能命中(当然),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7255169/

相关文章:

c# - 创建自定义 Html Helper : MyHelperFor

c# - C#Windows Forms App-显示气球提示

arrays - 数组中的条件和

java - EWS java检查电子邮件是否加密

c# - 验证带有附件 "the hash value is not correct"的数字签名电子邮件

c# - 如何用 StreamWriter 写特殊字符 (é, è)?

c# - 在 c# 项目中移动文件时是否必须更改命名空间

javascript - 在某些事件上加载某些图像(而不是在页面加载时)

performance - Tomcat Spring - 在本地工作区中创建 Spring Web 应用程序上下文需要 8 分钟

office365 - Office 365 EWS 不返回 X-BackendOverrideCookie