您好 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/