2013-02-28 2 views
-1

Я пишу библиотеку службы Wcf и хочу загрузить неуправляемую com dll. Длл ком резьба модель не установлена ​​так его однопоточные компонент унаследованных, который работает только в главном STA threading modelНевозможно создать объект комком компонентов, записанный в неуправляемом коде с .Net wcf service

В ФОС службе, я поставил квартиру в ГНА like

Теперь, когда я пытаюсь создать экземпляр COM-компонент, это дает исключение

System.Runtime.InteropServices.SEHException : External component has thrown an exception. 

Когда я отладки DLL ком и бросает ошибку RPC_E_WRONG_THREAD.

Я могу исправить проблему, установив модель резьбы на Free Threaded Marshaller. Но мне не разрешено изменять текущую модель потоков com dll.

Так что, пожалуйста, помогите мне, как я могу получить доступ к com dll из wcf-сервиса?

.Net Framework 4.0, Windows 7 x64

+0

Infact я могу получить доступ к COM DLLs от простого C# консольное приложение, установив квартиру как STA, потому что я к нему доступ из главного потока, который соответствует потоковой модели из COM DLLs. – Amjad

+0

, но в службе wcf я пытаюсь получить доступ к COM через рабочий поток (который является STA), поэтому его не получают доступа. так есть ли какой-либо способ доступа к COM из основного потока службы WCF ???? – Amjad

ответ

0

Ну, наконец, проблема решена ....

шаги:

  1. хозяин службы библиотеки ФОС в WindowsForm App.
  2. установить потоковую квартиру в WindowsForm приложении к ГЕН
  3. установить диспетчер, определенный в службе ФОС для текущего диспетчера как

    WcfTest.Service1.disp = System.Windows.Threading.Dispatcher.CurrentDispatcher;

и то все :)