2016-06-28 14 views
0

Я пытаюсь запустить OpenALPR внутри моего приложения WCF, и далеко не могу его запустить. Я продолжаю получатьНе удается загрузить OpenALPR внутри приложения WCF

«Не удалось загрузить файл или сборку openalpr-net.DLL» или одну из его зависимостей. Указанный модуль не найден ».

ошибка на обоих IIS, а также в VS2015-Community edition.

Я пропустил следующую тему, но не смог решить мою проблему.

https://groups.google.com/forum/#!topic/openalpr/7ADDNSkhoLE
https://groups.google.com/forum/#!topic/openalpr/Nu26YmbOSng

Все через Интернет он говорит, что это проблема платформы, это то, что у меня есть на данный момент.

Visual Studio 2015 WCF Application 
Reference to openalpr-net.dll (64bit) in my project 
Copied opencv_world300.dll, opencv_ffmpeg300_64.dll, liblept170.dll into bin folder manually 
Included openalpr.conf in the root folder of WCF application 
Included runtime_data folder in the root folder of WCF application 
Set 'unblock' for all the dll's, and files under runtime_data folder 
Project > Properties > Build > General > Platform target > x64 
Project > Properties > Build > Configuration > Active(Debug) 
Project > Properties > Build > Platform > Active (x64) 

Я также опубликовал приложение на локальном сервере IIS, я установил пул приложений для интегрированного режима с .NET 4.0, я попытался включить и отключить «Enable 32-битное приложение», но оба они Didn» я работаю для меня.

Когда я выбираю Service.svc в обозревателе решений и отладки приложения, я получаю ниже ошибки в WCF Test Client

Error: Cannot obtain Metadata from http://localhost:55460/AlprService.svc If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error URI: http://localhost:55460/AlprService.svc Metadata contains a reference that cannot be resolved: 'http://localhost:55460/AlprService.svc'. The content type text/html; charset=utf-8 of the response message does not match the content type of the binding (application/soap+xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were: ' 
Server Error in '/' Application. 
Could not load file or assembly 'openalpr-net.DLL' or one of its dependencies. The specified module could not be found. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.IO.FileNotFoundException: Could not load file or assembly 'openalpr-net.DLL' or one of its dependencies. The specified module could not be found. 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 

[FileNotFoundException: Could not load file or assembly 'openalpr-net.DLL' or one of its dependencies. The specified module could not be found.] System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0 System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +234 System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +108 System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +25 System.Reflection.Assembly.Load(String assemblyString) +34 System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +49[ConfigurationErrorsException: Could not load file or assembly 'openalpr-net.DLL' or one of its dependencies. The specified module could not be found.] System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +772 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +259 System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +163 System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +230 System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +76 System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +139 System.Web.Compilation.BuildManager.ExecutePreAppStart() +176 System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +882[HttpException (0x80004005): Could not load file or assembly 'openalpr-net.DLL' or one of its dependencies. The specified module could not be found.] System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +579 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +112 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +716 

я могу запустить следующую команду из файла readme.txt в загрузке папка без каких-либо проблем, и вы можете увидеть результат «alpr -p tx -n 30 samples/us-4.jpg»

Также, когда я включаю Включить 32-разрядное приложение в IIS, я получаю сообщение об ошибке с именем projectname. dll не была загружена, другая - «openalpr-net.DLL» не пропала. Я публикую Release - x64 для IIS.

Может ли кто-нибудь предложить или указать мне правильное направление? Что я здесь делаю неправильно?

ответ

0

Я почесал голову над этим же вопросом, но, наконец, получил его работу;

Убедитесь, что вы добавили ссылку на 64-bit openalpr-net.dll.

В коде WCF убедитесь, что вы загружаете файл конф и runtime_data папку из одной и той же папке, в которой сборка с помощью этого кода

public string AssemblyDirectory 
    { 
     get 
     { 
      var codeBase = Assembly.GetExecutingAssembly().CodeBase; 
      var uri = new UriBuilder(codeBase); 
      var path = Uri.UnescapeDataString(uri.Path); 
      return Path.GetDirectoryName(path); 
     } 
    } 
     String config_file = Path.Combine(AssemblyDirectory, "openalpr.conf"); 
     String runtime_data_dir = Path.Combine(AssemblyDirectory, "runtime_data"); 

     using (var alpr = new AlprNet("us", config_file, runtime_data_dir)) 

Публикация ФОС для локального или удаленного IIS. Скажем, вы публикуете его в c: \ inetpub \ wwwroot \ alprService. Скопируйте файл openalpr.conf и папку runtime_data в папку c: \ inetpub \ wwwroot \ alprService \ bin \. Скопируйте 3 dlls, liblept170.dll, opencv_ffmpeg300_64.dll и opencv_world300.dll в папку system32 на сервере хостинга. Вы найдете эти DLL в той же папке, что и ваш openalpr-net.dll из github.

Сообщите мне, если это сработало для вас. Я могу отправить изображение и получить список спичек.

Теперь вы можете загрузить службу wcf без ошибки.