Lync: VideoWindows для AVModality.VideoChannel имеют значение null после успешного вызова BeginStart (COMException HRESULT: 0x80029C4A TYPE_E_CANTLOADLIBRARY)

В настоящее время мы пытаемся внедрить связь 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%: если мы возьмем ранее упомянутое тестовое решение и ничего не сделаем, кроме ссылки, оно перестанет работать.

Любая идея, как такое возможно?


person Sebastian Negraszus    schedule 03.07.2012    source источник


Ответы (1)


Мы решили это! Вроде. Ссылка на Quartz.NET DLL каким-то образом вызвала проблему. Подробнее в обновленном вопросе.

На данный момент мы удалили компонент, который использовал Quartz. В настоящее время он нам не нужен.

Но меня по-прежнему интересует дальнейшая информация о том, как простая ссылка может вызвать такую ​​​​проблему.

person Sebastian Negraszus    schedule 09.07.2012
comment
Вы можете переместить информацию из обновления в свой ответ, где это будет иметь больше смысла. В конце концов, это оказалось отсылкой к Quartz.NET. - person BoltClock; 11.07.2012