Lync - 与ContactEndpoints的不一致行为

时间:2013-08-29 16:48:44

标签: c# lync

我正在使用基于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个端点)。但是,如果他不在联系人列表中,我只能访问1个端点。

任何想法为什么会这样发生?我需要关闭全球隐私设置吗?

如何随时访问所有端点?

谢谢。

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

4 个答案:

答案 0 :(得分:3)

我在尝试编写程序以获取Lync SDK 2010上所有用户的状态时遇到了类似的问题。选择所有用户并读取其状态(在线/离线等)。但它只与那些位于客户联系人列表中的联系人一起运作良好。我不知道为什么,但找不到解决方案。稍后我使用UCMA 4(带有应用程序端点),虽然列表从AD收到并且只能获得当前状态。

使用AD搜索可能有意义吗?用户查找电话号码?如果是这样,请尝试将此过滤器用于DirectorySearcher:

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

P.S。你用的是什么sdk?

答案 1 :(得分:1)

来自Microsoft支持部门的回答:

  

您看到的行为是由于Lync客户端的在线订阅优化,因此订阅会延迟,直到Lync客户端需要必要的联系信息。 Photo是此优化的示例。另一个例子是ContactEndpoints。请查看MSDN文档中的Lync 2013迁移文档的Contact presence subscription changes section。   具体而言,您必须为需要所有ContactEndpoints的联系人创建和维护自己的ContactSubscription。

答案 2 :(得分:0)

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

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

           ContactSubscription _contactSubscription = lyncObj.ContactManager.CreateSubscription();

                _contactSubscription.AddContact(foundContact);

                _contactSubscription.Subscribe(ContactSubscriptionRefreshRate.High, _ContactInformationList);

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

答案 3 :(得分:0)

有问题的是依赖于联系人信息,即使对于lync客户端用户也是如此。在我们的解决方案中,我们正在做这样的事情:

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

我希望当前的lync用户联系人始终正确填写。如果它不是,我希望代码抛出异常或者至少返回null或空字符串。 相反,它有时会返回联系人的sip-uri而没有领先的&#34; sip:&#34;字首。奇怪的是,这并不总是可重复的:大多数情况下,上面的代码正确地返回主电子邮件地址(根据活动目录),有时它的行为如上所述。