Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
.net 我们正在使用Lync SDK获取联系信息,但它无法返回完整的电话号码列表_.net_C# 4.0_Lync_Lync Client Sdk - Fatal编程技术网

.net 我们正在使用Lync SDK获取联系信息,但它无法返回完整的电话号码列表

.net 我们正在使用Lync SDK获取联系信息,但它无法返回完整的电话号码列表,.net,c#-4.0,lync,lync-client-sdk,.net,C# 4.0,Lync,Lync Client Sdk,我们正在使用Lync SDK获取要在应用程序中显示的联系信息和电话号码。使用Lync搜索控件,右键单击联系人,我们尝试获取联系人的电话号码 在Lync search control中,存在不返回联系人卡中完整信息的间歇性问题。有时它工作正常,但有时它无法返回完整的电话号码列表 List<object> endPoints = new List<object>(); List<ContactInformationType> _ContactInformation

我们正在使用Lync SDK获取要在应用程序中显示的联系信息和电话号码。使用Lync搜索控件,右键单击联系人,我们尝试获取联系人的电话号码

在Lync search control中,存在不返回联系人卡中完整信息的间歇性问题。有时它工作正常,但有时它无法返回完整的电话号码列表

List<object> endPoints = new List<object>();
List<ContactInformationType> _ContactInformationList = new List<ContactInformationType>();
_ContactInformationList.Add(ContactInformationType.EmailAddresses);
_ContactInformationList.Add(ContactInformationType.ContactEndpoints);
try
{
    if (!string.IsNullOrWhiteSpace(sipuri))
    {
        Contact _contact = lyncObj.ContactManager.GetContactByUri(sipuri);
        Microsoft.Lync.Controls.ContactCard _contactCard = new Microsoft.Lync.Controls.ContactCard();
        _contactCard.Source = contact.GetContactInformation(ContactInformationType.EmailAddresses);
        ContactSubscription _contactSubscription = lyncObj.ContactManager.CreateSubscription();
        _contactSubscription.AddContact(_contact);
        _contactSubscription.Subscribe(ContactSubscriptionRefreshRate.High, _ContactInformationList);
        // add sleep to subscribe 
        System.Threading.Thread.Sleep(500);
        var telephoneNumbersList = (List<object>)_contact.GetContactInformation(ContactInformationType.ContactEndpoints);
        foreach (object endPoint in telephoneNumbersList)
        {
            Logger.LogInfo(((ContactEndpoint)endPoint).DisplayName + " " + ((ContactEndpoint)endPoint).Type.ToString());
        }
        endPoints = telephoneNumbersList.Where<object>(N => ((ContactEndpoint)N).Type == ContactEndpointType.HomePhone || ((ContactEndpoint)N).Type == ContactEndpointType.MobilePhone || ((ContactEndpoint)N).Type == ContactEndpointType.OtherPhone || ((ContactEndpoint)N).Type == ContactEndpointType.WorkPhone).ToList<object>();
    }
}
List endPoints=new List();
列表_ContactInformationList=新列表();
_ContactInformationList.Add(ContactInformationType.EmailAddresss);
_ContactInformationList.Add(ContactInformationType.ContactEndpoints);
尝试
{
如果(!string.IsNullOrWhiteSpace(sipuri))
{
Contact _Contact=lyncObj.ContactManager.GetContactByUri(sipuri);
Microsoft.Lync.Controls.ContactCard\u ContactCard=新的Microsoft.Lync.Controls.ContactCard();
_contactCard.Source=contact.GetContactInformation(ContactInformationType.EmailAddresss);
ContactSubscription\u ContactSubscription=lyncObj.ContactManager.CreateSubscription();
_contactSubscription.AddContact(_contact);
_contactSubscription.Subscribe(ContactSubscriptionRefreshRate.High,_ContactInformationList);
//添加睡眠以订阅
系统.线程.线程.睡眠(500);
var telephoneNumbersList=(列表)\ u contact.GetContactInformation(ContactInformationType.ContactEndpoints);
foreach(电话号码列表中的对象端点)
{
Logger.LogInfo((ContactEndpoint)endPoint.DisplayName++((ContactEndpoint)endPoint.Type.ToString());
}
端点=电话号码列表。其中(N=>((ContactEndpoint)N)。类型==ContactEndpointType.HomePhone | |((ContactEndpoint)N)。类型==ContactEndpointType.MobilePhone | |((ContactEndpoint)N)。类型==ContactEndpointType.WorkPhone.ToList();
}
}
有几次,完整的联系信息没有返回。联系人信息中只显示了两个电话号码中的一个。而一段时间后,所有电话号码都会返回

如果我尝试通过Microsoft Lync search搜索同一联系人,我可以在联系人卡中看到所有电话号码


你能建议一下根本原因和可能的解决方案吗?

你真的不应该为了等待结果而“睡觉”。数据可能需要一段时间才能恢复

您应该做的是添加一个处理程序。每次订阅的数据更改/加载时都会调用事件处理程序

这个API并不真正适合查询数据然后返回数据的访问模式(这看起来就是您要做的)。它实际上是一种订阅数据的模式,当数据被加载或更新时,您将被调用。在GUI中显示联系人信息时最有用,并且在加载时联系人信息会随时间“填充”

还请记住,当您与联系人联系完毕时,您需要打电话

Lync客户端缓存联系人数据,这就是为什么当您第二次调用它时,它会返回所有预填充的数据