В настоящее время мы пытаемся внедрить связь Lync (Lync SDK 2010) в наше приложение и столкнулись с проблемой с VideoWindows
(CaptureVideoWindow
, RenderVideoWindow
) VideoChannel
AVModality
: они всегда нулевые, даже после успешного вызова BeginStart
. Связь точно установлена. Мы можем поговорить. Наше собственное видео показано в удаленном клиенте Lync. AVModalityState
это Connected
. VideoChannelState
переходит от Connecting
к Receive
и к Send
.
Неважно, когда и как мы пытаемся получить к ним доступ: непосредственно после BeginStart
, в AsyncCallback
из BeginStart
, в ответ на различные изменения состояния или в ответ на внешний триггер (событие клика пользователя); в потоке main/UI или в потоке события/обратного вызова. Два видеоокна всегда пусты.
В примере приложения "%PROGRAMFILES%\Microsoft Lync\SDK\Samples\AudioVideoConversation" все работает так, как задумано: как только BeginStart
завершится, мы сможем получить доступ к ненулевым видеоокнам. В нашем небольшом автономном прототипе это тоже работает. Но в нашем реальном приложении это не так.
Мы дважды все проверили, и у нас действительно закончились идеи о том, что может вызвать эту проблему.
Любые идеи, любые намеки? Что-нибудь, что мы должны знать?
(Ссылка на соответствующую ветку форума MSDN)
Обновление (4 июля 2012 г., 15:46 CET):
Когда мы смотрим на членов VideoChannel, мы обнаруживаем, что внутри «Microsoft.Office.Uc» произошло внутреннее исключение COMException: ошибка загрузки DLL, HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY). Подробнее см. прикрепленный снимок экрана.
Мы провели некоторое исследование этой ошибки, но не нашли ничего, что помогло бы нам. Любые идеи, что вызывает исключение?
Обновление (9 июля 2012 г., 16:43 CET):
Мы провели дополнительные испытания...
Наше программное обеспечение состоит из одного основного приложения и множества похожих на плагины "приложений", загружаемых через MEF. Мы создали минимальное тестовое приложение, которое совершает видеозвонок: видеоокна не работали (как и ожидалось). Но когда мы взяли идентичный код и создали отдельное решение вне нашей архитектуры, тогда оно сработало. Так что проблема была в среде, а не в коде.
Сначала мы подозревали, что проблема может заключаться в MEF. Итак, мы внедрили код lync в наше основное приложение, обойдя всю архитектуру приложения. До сих пор не работает.
Затем мы постепенно отсекали всю нашу систему, пока, наконец, не достигли точки, в которой она действительно работала. Несколько раз пойдя по неверному пути, мы наконец нашли виновника... Quartz.NET!
По какой-то странной причине само наличие ссылки на сборку Quartz.dll v.1.0.3.3, даже без единой строчки кода Quartz, приводит к тому, что видеоокна не работают. Невероятно, но это воспроизводимо на 100%: если мы возьмем ранее упомянутое тестовое решение и ничего не сделаем, кроме ссылки, оно перестанет работать.
Любая идея, как такое возможно?