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

Posted

技术标签:

【中文标题】我们正在使用 Lync SDK 获取联系信息,但无法返回完整的电话号码列表【英文标题】:We are using the Lync SDK to fetch contact information but it fails to return complete phone number list 【发布时间】:2015-05-26 10:52:20 【问题描述】:

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

这存在间歇性问题,即在 Lync 搜索控件中的联系人卡片中不返回完整信息。有时它运行良好,但有时它无法返回完整的电话号码列表。

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>();
    

多次,完整的联系信息没有返回。联系信息中只显示了两个电话号码中的一个。一段时间后,所有电话号码都会返回。

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

您能否建议根本原因和可能的解决方案?

【问题讨论】:

【参考方案1】:

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

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

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

另外请记住,当您完成联系后,您需要致电ContactSubscription.Unsubscribe。

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

【讨论】:

以上是关于我们正在使用 Lync SDK 获取联系信息,但无法返回完整的电话号码列表的主要内容,如果未能解决你的问题,请参考以下文章

联系电话号码 Lync SDK 2013

在 Lync SDK 中使用 Contact.GetContactInformation 不会返回状态

Lync SDK (Microsoft.Lync.Model)

如何从 Lync 联系人卡片中获取用户的电话号码或其他联系人详细信息?

如何使用 powershell 从 lync 对话中获取消息?

Lync 客户端 SDK 报告错误的状态代码