2012-01-01 118 views
1

我有一個託管DLL在內部引用了一些非託管DLL。這個託管DLL被添加爲我的WCF服務項目的引用。但是,非託管DLL必須手動複製到我的項目的構建輸出路徑。他們不能在Visual Studio中引用。使用非託管DLL託管WCF服務

如果我嘗試在Visual Studio中的WCF服務主機內運行我的服務DLL,後者崩潰而沒有任何異常並自動重新啓動。如果我嘗試在IIS中託管服務DLL,則適用Sampe。我能夠嘗試在IIS託管時趕上WERReportMetadata崩潰日誌中的一個和ProblemSignatures說:

<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 Framework版本:v4.0.30319 描述:該過程因終止未處理的異常。 異常信息:System.TypeInitializationException堆棧:在 System.RuntimeMethodHandle._InvokeConstructor(System.IRuntimeMethodInfo, System.Object的[],System.SignatureStruct的ByRef,System.RuntimeType)在 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)在 System.ServiceModel.Description.ServiceDescription.CreateImplementation(System.Type) at System.ServiceModel.Description.ServiceDescription.SetupSing (System.ServiceModel.Description.ServiceDescription, System.Object,Boolean)at System.ServiceModel.Description.ServiceDescription.GetService(System.Type) at System.ServiceModel.ServiceHost.CreateDescription(System.Collections.Generic。 IDictionary`2 的ByRef)處 System.ServiceModel.ServiceHost System.ServiceModel.ServiceHostBase.InitializeDescription(System.ServiceModel.UriSchemeKeyedCollection) 在System.ServiceModel.ServiceHost.InitializeDescription(System.Type的, System.ServiceModel.UriSchemeKeyedCollection) ..(System.Type,System.Uri [])at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(System.Type, System.Uri []在 System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(System.String),在 System.ServiceModel.ServiceHostingEnvironment + HostingManager.CreateService(System.String) 的System.Uri [])在 System.ServiceModel.ServiceHostingEnvironment + HostingManager System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(System.String) at System.ServiceModel.ServiceHostingEnvironment + HostingManager.EnsureServiceAvailable(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 *)在 System.Runtime.Fx + IOCompletionThunk.UnhandledExceptionFrame(UInt32的, UInt32的,System.Threading.NativeOverlapped *)在 系統。 Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32,System .Threading.NativeOverlapped *)

編輯2:

原來我有運行Visual Studio如在任何時候管理員。這消除了以前的錯誤。

謝謝。

回答

0

我需要將非託管DLL添加到%systemroot%\ syswow64。這是否可以在Visual Studio中的WCF服務主機以及ASP開發服務器中運行我的服務。