使用非托管dll托管WCF服务



我有一个托管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> 

这是什么意思?我能做些什么?任何关于使用非托管dll的WCF托管的参考资料也很有用。

编辑1:复制非托管dll到%systemroot%syswow64允许我使用Visual Studio WCF服务主机托管我的服务。我从这里得到了消息。然而,这并不能阻止WebDev.WebDServer40.exe崩溃。

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

应用程序:WebDev.WebServer40.exe框架版本:v4.0.30319描述:由于未处理的异常,进程被终止。异常信息:System。TypeInitializationException堆栈:atSystem.RuntimeMethodHandle._InvokeConstructor (System.IRuntimeMethodInfo系统。对象[],系统。SignatureStruct ByRef, System.RuntimeType) atSystem.RuntimeMethodHandle.InvokeConstructor (System.IRuntimeMethodInfo系统。对象[],系统。SignatureStruct, System.RuntimeType) atSystem.Reflection.RuntimeConstructorInfo.Invoke (System.Reflection.BindingFlagsSystem.Reflection。粘结剂体系。对象[],System.Globalization.CultureInfo)System.ServiceModel.Description.ServiceDescription.CreateImplementation (System.Type)在System.ServiceModel.Description.ServiceDescription.SetupSingleton (System.ServiceModel.Description.ServiceDescription系统。对象,布尔值)System.ServiceModel.Description.ServiceDescription.GetService (System.Type)在System.ServiceModel.ServiceHost.CreateDescription (System.Collections.Generic.IDictionary ' 2ByRef)System.ServiceModel.ServiceHostBase.InitializeDescription (System.ServiceModel.UriSchemeKeyedCollection)System.ServiceModel.ServiceHost.InitializeDescription (System.Type,System.ServiceModel.UriSchemeKeyedCollection)System.ServiceModel.ServiceHost . .男星(系统。键入,System.Uri[]) atSystem.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost (System.TypeSystem.Uri [])system . string, System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost (System.Uri [])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*) atSystem.Runtime.Fx + IOCompletionThunk.UnhandledExceptionFrame (UInt32,UInt32, System.Threading.NativeOverlapped*) atSystem.Threading._IOCompletionCallback.PerformIOCompletionCallback (UInt32UInt32, System.Threading.NativeOverlapped *)

编辑2:

原来我必须运行Visual Studio作为管理员在任何时候。这消除了之前的错误。

谢谢。

我需要将非托管dll添加到%systemroot%syswow64。这样做了,可以在Visual Studio的WCF服务主机以及ASP开发服务器中运行我的服务。

最新更新