Lync 2013客户端,ExtensibilityWindow在2个传入的AV呼叫时不会打开

时间:2015-03-16 16:56:06

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

我在使用Lync2013客户端SDK时遇到了一些麻烦。这是一件小事,但在我看来它应该有效。

我正在使用ExtensibilityWindow创建一个显示调用者数据的应用程序。在应用程序启动时,我注册应用程序等,并在接受的调用上,程序调用ConversationWindow上的BeginOpenExtensibilityWindow。几乎在所有情况下都可以正常工作。但是,正如我现在所知,有一个特定的情况,当这不起作用时:当一个新的传入AV呼叫出现时,同时有一个活动(onHold或不起作用)来电。

(所以来电者A打电话给我,我接受并且在通话时,来电者B给我打电话。然后函数BeginOpenExtensibilityWindow什么都不做)

如果其中一个是出站的,那么没有问题,但是当它们都是入站时,对BeginOpenExtensibilityWindow的调用没有做任何事情。 EndOpenExtensibilityWindow不会引发任何错误,它只是通过。

要找出问题所在,我尝试了以下方法:

  • 没有缓存检索到的ConversationWindow:每当我需要它时,我都会调用Automation.GetConversationWindow(对话)

  • 对BeginOpenExtensibilityWindow的延迟调用:启动后台线程,连接后等待5秒,然后调用它。

  • 在BeginOpenExtensibilityWindow之前调用CloseExtensibilityWindow

我发现的是:在BeginOpenExtensibilityWindow之前调用CloseExtensibilityWindow时,第一个会话引发错误。然而,第二个不是,而是调用CloseExtensibilityWindow关闭第一个对话的可扩展性窗口!我绝对100%肯定我通过调用automation.GetConversationWindow(_conversation)来检索对第二个窗口的引用,并使用' _conversation'是第二个电话!

所以,为了绝对确定,我记录了每次调用窗口,如下:

 internal ConversationWindow ConversationWindow
    {
        get
        {
            _window = _automation.GetConversationWindow(_conversation);
            debugA.Add(string.Format("ConvId: {0}, WinHandle: {1}", _conversation.Properties[Microsoft.Lync.Model.Conversation.ConversationProperty.Id], _window.Handle));
            return _window;
        }
}

将debugA作为静态列表,

当然,感叹......,conversationId一直是空的(问题的根源?)所以我把它切换到_conversation.GetHashCode(),然后调试的内容是:

ConvId:21950498,WinHandle:1902160

...更多......

ConvId:13391695,WinHandle:1902160

...更多......

显然,自动化为不同的对话返回相同的句柄!同样,这只是两个传入的AV呼叫,IM工作正常,没有混合参考。

在我看来,这似乎是一个错误...但我不是专家......

任何帮助,非常感谢!

1 个答案:

答案 0 :(得分:0)

忘记提及,这是一个错误,微软修复了它: 2015年9月8日Lync 2013(Skype for Business)的安全更新(KB3085500)