Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EWS:ExchangeWeb服务。多次调用ResolveName-性能命中(当然)_C#_Performance_Exchangewebservices - Fatal编程技术网

C# EWS:ExchangeWeb服务。多次调用ResolveName-性能命中(当然)

C# EWS:ExchangeWeb服务。多次调用ResolveName-性能命中(当然),c#,performance,exchangewebservices,C#,Performance,Exchangewebservices,大家好,我的社区 我正在通过EWS从Outlook帐户加载所有Exchange Outlook联系人。不幸的是,当联系人的电子邮件地址位于我们自己的Active Directory中时,它会被转换为不同的格式(/o=…;ou=…;cn=…)。 要将其转换为常规电子邮件地址,我使用EWS服务对象的ResolveName方法 现在的问题是:我正在遍历FindItems结果的所有项,以将返回的数据映射到我自己的C#类上。在这个循环中,我必须调用ResolveName方法,这总是导致调用EWS。说到几个

大家好,我的社区

我正在通过EWS从Outlook帐户加载所有Exchange Outlook联系人。不幸的是,当联系人的电子邮件地址位于我们自己的Active Directory中时,它会被转换为不同的格式(/o=…;ou=…;cn=…)。 要将其转换为常规电子邮件地址,我使用EWS服务对象的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 ResolvedEmailAddressCache=new Dictionary();
私有静态字符串GetResolvedEmailAddress(字符串地址,ExchangeService svc)
{
if(ResolvedMailAddressCache.ContainsKey(地址))
返回ResolvedMailAddressCache[address];
NameResolutionCollection nd=svc.ResolveName(地址);
foreach(名称分辨率为nm,单位为nd)
{
如果(nm.Mailbox.RoutingType==“SMTP”)
{
ResolvedEmailAddressCache.Add(地址,nm.Mailbox.address);
返回nm.Mailbox.Address;
}
}
Add(地址,地址);
回信地址;
}

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

    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;
    }