无法在WCF应用程序中加载OpenALPR

本文关键字:加载 OpenALPR 应用程序 WCF | 更新日期: 2023-09-27 17:53:13

我试图在我的WCF应用程序中运行OpenALPR,到目前为止我无法运行它。我一直得到

"无法加载文件或程序集'openalpr-net.DLL'或其依赖项之一。"找不到指定的模块。"

在IIS和VS2015-Community版本中出现

错误。

我已经遵循了下面的线程,但无法解决我的问题。

https://groups.google.com/forum/!主题/openalpr/7 addnskhole
https://groups.google.com/forum/!主题/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集成模式,我试图启用和禁用"启用32位应用程序",但这两种方法都不适合我。

当我选择Service时。在解决方案资源管理器中的svc,并调试应用程序,我在WCF测试客户端

中得到以下错误
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'

另外,当我在IIS上打开启用32位应用程序时,我得到错误说projectname.dll未加载,否则它将是'openalpr-net.DLL'不丢失。我正在发布Release - x64到IIS.

谁能给我建议或指出正确的方向?我哪里做错了?

无法在WCF应用程序中加载OpenALPR

我对这个同样的问题感到挠头,但最终还是成功了;

确保添加了64位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))

发布wcf到本地或远程IIS。假设您将其发布到c:'inetpub'wwwroot'alprService。将openalpr.conf文件和runtime_data文件夹复制到c:'inetpub'wwwroot'alprService'bin'文件夹。将3个dll, liblept170.dll, opencv_ffmpeg300_64.dll和opencv_world300.dll复制到主机服务器的system32文件夹中。您将在github.

中的openalpr-net.dll文件夹中找到这些dll。

让我知道这是否适用于你。我能够发送图像并获得匹配列表。

现在您应该能够加载wcf服务而不会出现错误。