【问题标题】:Contact presence/status on Lync 2013 SDK shows "Presence unknown" until manual client searchLync 2013 SDK 上的联系人状态/状态显示“状态未知”,直到手动客户端搜索
【发布时间】:2014-07-24 05:26:23
【问题描述】:

我正在为 lync 开发一项自动化服务,该服务将根据人员的可用性/lync“状态”自动将人员添加到 IM 对话中。它本质上是一个列表,检查谁在线,然后将第一个人添加到通话中。

我遇到的问题是有时(通常在必须重新启动 lync 时),它并不总是获取联系人的存在。

首先,我只是让它抓住了存在感。然后我添加了代码来检查 ContactInformationChanged 事件是否触发,但这似乎不会发生,除非我进入应用程序并手动输入我要查找的别名。

是否有我在某处缺少的 Refresh() 方法?或者有什么办法可以强迫它找到这个?这是我的搜索方法:

   public Contact GetContact(string emailAddress)
    {
        Contact user;
        lock (ContactLookupCache)
        {
            while (!ContactLookupCache.TryGetValue(emailAddress.ToLower(), out user))
            {
                lock (Client)
                {
                    Client.ContactManager.BeginSearch(emailAddress, this.HandleContactLookup, null);
                }
                Monitor.Wait(ContactLookupCache);
            }
        }
        return user;
    }

 public string GetContactPresenceState(Contact contact)
        {            
            string presenceStatus = contact.GetContactInformation(ContactInformationType.Activity).ToString();
            // see if the status is either "Presence unknown" or "Updating..."
            if (IsUnknownPresenceState(presenceStatus))
            {
                lock (contact)
                {
                    //bug?? This event seems to only fire sometimes when you search on the app for contact details
                    contact.ContactInformationChanged += (object sender, ContactInformationChangedEventArgs e) =>
                    {
                        if (e.ChangedContactInformation.Contains(ContactInformationType.Activity))
                        {
                            lock (contact)
                            {
                                presenceStatus = contact.GetContactInformation(ContactInformationType.Activity).ToString();
                                if(!IsUnknownPresenceState(presenceStatus))
                                    Monitor.PulseAll(contact);
                            }
                        }
                    };
                    Monitor.Wait(contact);
                }
            }
            return presenceStatus;
        }

另外,对于糟糕的代码感到抱歉......我只是想让它工作并不断抛出更多垃圾代码,希望能有所帮助。

【问题讨论】:

    标签: c# lync-2013 lync-client-sdk


    【解决方案1】:

    您能否验证代码对您联系人列表中的所有联系人都正常工作,并且只是那些未列出的未正确引发状态更改事件的联系人?

    这对我来说很有意义,因为您使用的是客户端 SDK,它只会告诉您客户端感兴趣的事件。例如,如果所有 85,000 个客户端都收到了一家公司。

    我认为您处于定期轮询存在或将联系人添加到客户端的领域(也许在相关组下只是为了保持整洁)。

    您可能想研究比客户端 SDK 更适合集中式服务的 UCMA SDK。

    【讨论】:

    • 谢谢!没错,该事件仅针对列表中的联系人引发。在我尝试获取状态信息之前,我现在有添加到联系人列表的代码。此外,我正在考虑在 UCMA SDK 中重写它(因为它确实更有意义)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多