-1

我正在编写一个 Wcf 服务库并想加载一个非托管的 com dll。未设置 com dll 线程模型,因此它是仅在主 STA线程模型中运行的单线程遗留组件

在 wcf 服务中,我已将公寓设置为 STA

现在,当我尝试创建 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 框架 4.0,Windows 7 x64

4

1 回答 1

0

嗯,终于问题解决了......

脚步:

  1. 将 wcf 服务库托管到 WindowsForm 应用程序中。
  2. 将 WindowsForm 应用程序的线程单元设置为 STA
  3. 将 wcf 服务中定义的调度程序设置为当前调度程序,例如

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

就这样 :)

于 2013-03-06T10:04:44.473 回答