Размещение службы WCF с использованием неуправляемых библиотек DLL
У меня есть управляемая DLL, которая внутренне ссылается на пару неуправляемых DLL. Эта управляемая DLL добавлена как ссылка на мой сервисный проект WCF. Однако неуправляемые библиотеки DLL необходимо вручную скопировать в путь вывода сборки моего проекта. На них нельзя ссылаться в Visual Studio.
Если я пытаюсь запустить свою служебную DLL-библиотеку на узле службы WCF в Visual Studio, последний завершается сбоем без каких-либо исключений и автоматически перезапускается. Sampe применяется, если я пытаюсь разместить службу DLL в IIS. Мне удалось перехватить один из журналов сбоев WERReportMetadata при попытке разместить его в IIS, и в поле "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 Service Host. Я получил подсказку отсюда. Однако это не останавливает сбой WebDev.WebDServer40.exe.
Редактировать 2 Это ошибка.NET Runtime, полученная из Event Viewer:
Приложение: WebDev.WebServer40.exe Framework Версия: v4.0.30319 Описание: Процесс был прерван из-за необработанного исключения. Сведения об исключении: стек исключений System.TypeInitializationException: в System.RuntimeMethodHandle._InvokeConstructor(System.IRuntimeMethodInfo, System.Object[], System.SignatureStruct ByRef, System.RuntimeType) в System.RuntimeMethodIRjectInO.Into.OnjectOn.IntoIn.IntoIn.Into.Into.Inject.OnjectInIn, System..CreateImplementation (System.Type) в System.ServiceModel.Description.ServiceDescription.SetupSingleton (System.ServiceModel.Description.ServiceDescription, System.Object, Boolean) в System.ServiceModel.Description.ServiceDescription.GetService(GetService).ServiceModel.ServiceHost.CreateDescription(System.Collections.Generic.IDictionary`2 ByRef) в System.ServiceModel.ServiceHostBase.InitializeDescription(System.ServiceModel.UriSchemeKeyedCollection) в System.ServiceModel.ServiceHost.InitializeDescription(System.Type, System.ServiceModel.UriSchemeKeyedCollection) в System.ServiceModel.ServiceHost..ctor(System.Type, System.Uri[]) в System.ServiceFactSA.CreateServiceHost(System.Type, System.Uri[]) в System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(System.String, System.Uri[]) в System.ServiceModel.ServiceHostingEnvironment+HostingManager.CreateService в System (.ServiceModel.ServiceHostingEnvironment+HostingManager.ActivateService(System.String) в System.ServiceModel.ServiceHostingEnvironment+HostingManager.EnsureServiceAvailable(System.String) в System.ServiceModel.ServiceHextAccessEvSignSignSignSignSignSignSignSignSergServServServServServServMe HandleRequest() в System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest() в System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(System.Object) в System.Runtime.IOThreadScheduler+ScheduledOverlapped. в System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
Изменить 2:
Оказывается, я должен всегда запускать Visual Studio с правами администратора. Это устраняет предыдущую ошибку.
Благодарю.
1 ответ
Мне нужно было добавить неуправляемые библиотеки DLL в%systemroot%\syswow64. Сделал это и смог запустить мой сервис в WCF Service Host в Visual Studio, а также на сервере разработки ASP.