Visual studio 2010 无法从.Net wcf服务创建以非托管代码编写的com组件的对象
我正在编写一个Wcf服务库,希望加载一个非托管com dll。未设置com dll线程模型,因此它是仅在主STA中运行的单线程旧组件 在wcf服务中,我已将公寓设置为STA 现在,当我尝试创建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
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????