2

我们正在使用 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 搜索搜索同一个联系人,我可以在联系人卡片中看到所有电话号码。

您能否提出可能的根本原因和可能的解决方案?

4

1 回答 1

1

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

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

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

还请记住,当您完成联系人时,您需要调用ContactSubscription.Unsubscribe 。

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

于 2015-11-12T19:06:32.397 回答