2013-02-28 38 views
-1

我正在編寫一個Wcf服務庫並希望加載一個非託管的com DLL。在COM DLL線程模型不設置,只有運行在主STA threading model無法創建從.net wcf服務寫入非託管代碼的com組件對象

在WCF服務,所以它是一個單線程的舊式組件,我已經設置了公寓爲STA現在like

,當我嘗試創建COM組件的情況下,當我調試COM DLL和它拋出一個錯誤RPC_E_WRONG_THREAD給出了一個例外

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

我可以通過將線程模型設置爲Free Threaded Marshaller來解決此問題。但我不能改變當前的COM DLL線程模型。

那麼請幫助我,我如何從wcf服務訪問com dll?

框架4.0,Windows 7的64位

+0

INFACT我可以從一個簡單的C#控制檯應用程序通過設置公寓爲STA訪問COM DLL的,因爲我是從主線程訪問它的COM的線程模型匹配dll文件。 – Amjad 2013-03-01 07:02:19

+0

但在wcf服務我試圖通過工作線程(這是STA)訪問COM,所以它沒有被訪問。那麼有什麼辦法從WCF服務的主線程訪問COM? – Amjad 2013-03-01 07:04:52

回答

0

好了,終於在問題解決....

步驟:

  1. 主機WCF服務庫到WindowsForm應用。
  2. 設置WindowsForm應用程序的線程公寓至STA
  3. 設置WCF服務定義到當前調度等

    調度

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

和多數民衆都:)