【问题标题】:Lync - inconsistent behavior with ContactEndpointsLync - 与 ContactEndpoints 的行为不一致
【发布时间】:2013-09-02 05:25:27
【问题描述】:

我正在开发基于 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:我尝试单独加载结果集中的每个联系人,但仍然得到相同的行为。

【问题讨论】:

    标签: c# lync


    【解决方案1】:

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

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

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

    附:你用的是什么sdk?

    【讨论】:

    • 真的尝试在 AD 上搜索)这不是解决方案,但可以提供帮助:尝试查找损坏的联系人(不在您的联系人列表中,您无法访问完整的详细信息),并且然后在 Lync 客户端中运行搜索(它必须在搜索结果中)。结果:联系人可通过 SDK 使用
    【解决方案2】:

    来自 Microsoft 支持的答复:

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

    【讨论】:

      【解决方案3】:

      我也遇到过同样的问题。您可以在显式调用 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 或只想重试。 希望这会有所帮助。

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2010-12-23
          • 2020-02-28
          • 2022-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-20
          相关资源
          最近更新 更多