使用非托管DLL托管WCF服务

时间:2012-01-01 17:38:37

标签: iis-7 unmanaged wcf wcf-hosting

我有一个托管DLL,内部引用了几个非托管DLL。此托管DLL作为对WCF服务项目的引用添加。但是,必须手动将非托管DLL复制到项目的构建输出路径。它们不能在Visual Studio中引用。

如果我尝试在Visual Studio中的WCF服务主机中运行我的服务DLL,后者会在没有任何异常的情况下崩溃并自动重新启动。如果我尝试在IIS中托管服务DLL,Sampe适用。尝试在IIS中托管时,我能够捕获其中一个WERReportMetadata崩溃日志,而问题签名说:

<ProblemSignatures>
    <EventType>CLR20r3</EventType>
    <Parameter0>webdev.webserver40.exe</Parameter0>
    <Parameter1>10.0.0.0</Parameter1>
    <Parameter2>4d5f345a</Parameter2>
    <Parameter3>GTAPIASM</Parameter3>
    <Parameter4>2.0.5.0</Parameter4>
    <Parameter5>4e9254a5</Parameter5>
    <Parameter6>166</Parameter6>
    <Parameter7>23</Parameter7>
    <Parameter8>System.AccessViolationException</Parameter8>
  </ProblemSignatures> 

这意味着什么,我该怎么办呢? WCF托管与非托管DLL的任何参考资料也将是有用的。

编辑1:将非托管DLL复制到%systemroot%\ syswow64允许我使用Visual Studio WCF服务主机托管我的服务。我从here得到了提示。但是,这并不会阻止WebDev.WebDServer40.exe崩溃。

编辑2 这是从事件查看器捕获的.NET运行时错误:

  

应用程序:WebDev.WebServer40.exe框架版本:v4.0.30319   描述:由于未处理的异常,进程终止。   异常信息:System.TypeInitializationException Stack:at   System.RuntimeMethodHandle._InvokeConstructor(System.IRuntimeMethodInfo,   System.Object [],System.SignatureStruct ByRef,System.RuntimeType)at   System.RuntimeMethodHandle.InvokeConstructor(System.IRuntimeMethodInfo,   System.Object [],System.SignatureStruct,System.RuntimeType)at   System.Reflection.RuntimeConstructorInfo.Invoke(System.Reflection.BindingFlags,   System.Reflection.Binder,System.Object [],   System.Globalization.CultureInfo)at   System.ServiceModel.Description.ServiceDescription.CreateImplementation(System.Type的)   在   System.ServiceModel.Description.ServiceDescription.SetupSingleton(System.ServiceModel.Description.ServiceDescription,   System.Object,Boolean)at   System.ServiceModel.Description.ServiceDescription.GetService(System.Type的)   在   System.ServiceModel.ServiceHost.CreateDescription(System.Collections.Generic.IDictionary`2   ByRef)at   System.ServiceModel.ServiceHostBase.InitializeDescription(System.ServiceModel.UriSchemeKeyedCollection)   在System.ServiceModel.ServiceHost.InitializeDescription(System.Type,   System.ServiceModel.UriSchemeKeyedCollection)at   System.ServiceModel.ServiceHost..ctor(System.Type,System.Uri [])at   System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(System.Type的,   System.Uri [])at   System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(System.String,   System.Uri [])at   System.ServiceModel.ServiceHostingEnvironment + HostingManager.CreateService(System.String)   在   System.ServiceModel.ServiceHostingEnvironment + HostingManager.ActivateService(System.String)   在   System.ServiceModel.ServiceHostingEnvironment + HostingManager.EnsureServiceAvailable(System.String)   在   System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(System.String)   在   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest()   在   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest()   在   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(System.Object的)   在   System.Runtime.IOThreadScheduler + ScheduledOverlapped.IOCallback(UInt32的,   UInt32,System.Threading.NativeOverlapped *)at   System.Runtime.Fx + IOCompletionThunk.UnhandledExceptionFrame(UInt32的,   UInt32,System.Threading.NativeOverlapped *)at   System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32的,   UInt32,System.Threading.NativeOverlapped *)

编辑2:

原来我必须始终以管理员身份运行Visual Studio。这消除了先前的错误。

感谢。

1 个答案:

答案 0 :(得分:0)

我需要将非托管DLL添加到%systemroot%\ syswow64。这是否可以在Visual Studio中的WCF服务主机以及ASP开发服务器中运行我的服务。