Lync-与ContactEndpoints的行为不一致

本文关键字:不一致 ContactEndpoints Lync- | 更新日期: 2023-09-27 18:29:28

我正在为基于Lync的公司目录开发自定义UI。使用Lync 2013执行此搜索:

Container.Instance.Lync.ContactManager.BeginSearch(SearchQuery,
            SearchProviders.GlobalAddressList,
            SearchFields.AllFields,
            SearchOptions.IncludeContactsWithoutSipOrTelUri,
            500,
            ContactsAndGroupsCallback, SearchQuery);

对于每个匹配的联系人,我尝试访问他们的端点以显示电话号码:

var cit = ContactInformationType.ContactEndpoints;
var endpoints = contact.GetContactInformation(cit) as List<object>;

问题

如果在我用于连接Lync的帐户的联系人列表中找到了联系人,则我可以访问完整的详细信息(5个端点)。然而,如果他不在联系人列表中,我只能访问一个端点。

你知道为什么会这样吗?我需要关闭全球隐私设置吗?

如何始终访问所有端点?

谢谢。

PS:我试着单独加载结果集中的每个联系人,但仍然得到相同的行为。

Lync-与ContactEndpoints的行为不一致

我在尝试编写程序以获取Lync SDK 2010上所有用户的状态时遇到了类似的问题。选择所有用户并读取其状态(在线/离线等)。但它只适用于客户端联系人列表中的联系人。我不知道为什么,但是没有找到解决办法。稍后,我使用UCMA4(带有应用程序端点),尽管该列表是从AD收到的,并且只能获得当前状态。

也许使用AD搜索是有意义的?通过用户sip查找电话号码?如果是,请尝试将此筛选器用于DirectorySearcher:

searcher.Filter = "(&(objectClass=user)(msRTCSIP-PrimaryUserAddress=*))"; //put sip instead of *

附言:你在用什么sdk?

Microsoft支持部门的回答:

您看到的行为是由于Lync客户端的状态订阅优化,因此订阅会延迟,直到Lync客户端需要必要的联系信息。照片就是这种优化的一个例子。另一个例子是ContactEndpoints。请查看MSDN文档中Lync 2013迁移文档页面的"联系人状态订阅更改"部分。特别是,您必须为需要所有ContactEndpoint的联系人创建并维护自己的ContactSubscription。

我一直面临着同样的问题。在显式调用GetContactInformation函数之前,您可以尝试加载人员的ContactCard

Microsoft.Lync.Controls.ContactCardobjContactCard=新的Microsoft.Lync.Controls.ContactCard();objContactCard.Source=objContact.GetContactInformation(ContactInformationType.EmailAddresses);

           ContactSubscription _contactSubscription = lyncObj.ContactManager.CreateSubscription();
                _contactSubscription.AddContact(foundContact);
                _contactSubscription.Subscribe(ContactSubscriptionRefreshRate.High, _ContactInformationList);

但是,您在获取信息(电话号码)时仍可能会有一些延迟。您可以选择使用线程.睡眠,也可以只想重试。希望这能有所帮助。

Problematic依赖联系信息,即使是lync客户端用户。在我们的解决方案中,我们正在做这样的事情:

Contact user = LyncClient.GetClient().Self.Contact;
string email = user.GetContactInformation(ContactInformationType.PrimaryEmailAddress) as string;

我希望当前的lync用户联系人总是正确填写。如果不是,我希望代码抛出一个异常,或者至少返回null或空字符串。相反,它有时会返回联系人的sip-uri,而不带前导"sip:"前缀。奇怪的是,这并不总是可复制的:大多数时候,上面的代码都会正确地返回主电子邮件地址(根据活动目录),有时它的行为会如上所述。