我在使用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工作正常,没有混合参考。
在我看来,这似乎是一个错误...但我不是专家......
任何帮助,非常感谢!
答案 0 :(得分:0)
忘记提及,这是一个错误,微软修复了它: 2015年9月8日Lync 2013(Skype for Business)的安全更新(KB3085500)