【发布时间】:2013-02-14 07:46:45
【问题描述】:
我正在编写一个 Wcf 服务库并想加载一个非托管 com dll。未设置 com dll 线程模型,因此它是仅在主 STA 中运行的单线程遗留组件threading model
在wcf服务中,我将公寓设置为STA like
现在当我尝试创建 com 组件的实例时,它给出了一个异常
System.Runtime.InteropServices.SEHException : External component has thrown an exception.
当我调试 com dll 时,它抛出了一个错误 RPC_E_WRONG_THREAD。
我可以通过将线程模型设置为Free Threaded Marshaller 来解决此问题。但是我不允许更改 com dll 的当前线程模型。
那么请帮助我,如何从 wcf 服务访问 com dll?
.Net Framework 4.0,Windows 7 x64
【问题讨论】:
-
事实上,我可以通过将单元设置为 STA 从简单的 C# 控制台应用程序访问 COM dll,因为我是从与 COM dll 的线程模型匹配的主线程访问它。
-
但在 wcf 服务中,我试图通过工作线程(即 STA)访问 COM,因此无法访问它。那么有什么办法可以从WCF服务的主线程访问COM????
标签: visual-studio-2010 wcf com wcf-client apartments