我有一个托管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。这消除了先前的错误。
感谢。
答案 0 :(得分:0)
我需要将非托管DLL添加到%systemroot%\ syswow64。这是否可以在Visual Studio中的WCF服务主机以及ASP开发服务器中运行我的服务。