Visual studio 2010 无法从.Net wcf服务创建以非托管代码编写的com组件的对象

Visual studio 2010 无法从.Net wcf服务创建以非托管代码编写的com组件的对象,visual-studio-2010,wcf,com,wcf-client,apartments,Visual Studio 2010,Wcf,Com,Wcf Client,Apartments,我正在编写一个Wcf服务库,希望加载一个非托管com dll。未设置com dll线程模型,因此它是仅在主STA中运行的单线程旧组件 在wcf服务中,我已将公寓设置为STA 现在,当我尝试创建com组件的实例时,它给出了一个异常 System.Runtime.InteropServices.SEHException : External component has thrown an exception. 当我调试com dll时,它抛出了一个错误RPC\u E\u error\u THREA

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

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

现在,当我尝试创建com组件的实例时,它给出了一个异常

System.Runtime.InteropServices.SEHException : External component has thrown an exception.
当我调试com dll时,它抛出了一个错误
RPC\u E\u error\u THREAD

我可以通过将threading model设置为自由线程封送器
来解决此问题。但我不允许更改com dll的当前线程模型

因此,请帮助我如何从wcf服务访问com dll


.Net Framework 4.0、Windows 7 x64好了,问题终于解决了

步骤:

  • 将wcf服务库托管到WindowsForm应用程序中
  • 将WindowsForm应用程序的线程单元设置为STA
  • 将wcf服务中定义的dispatcher设置为当前dispatcher,如

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


  • 仅此而已:)

    事实上,通过将单元设置为STA,我可以从一个简单的C#console应用程序访问COM DLL,因为我是从与COM DLL线程模型匹配的主线程访问它。但在wcf服务中,我尝试通过工作线程(即STA)访问COM,因此它不会被访问。那么有没有办法从WCF服务的主线程访问COM????