2016-06-28 2 views
0

Ich versuche, OpenALPR in meiner WCF-Anwendung auszuführen, und weit kann ich es nicht ausführen. Ich bekomme immerKann OpenALPR in der WCF-Anwendung nicht laden

"Konnte Datei oder Assembly 'openalpr-net.DLL' oder eine seiner Abhängigkeiten nicht laden. Das angegebene Modul konnte nicht gefunden werden."

Fehler sowohl in IIS als auch in VS2015-Community Edition.

Ich habe den folgenden Thread verfolgt, war aber nicht in der Lage, mein Problem zu lösen.

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

alle über das Internet es es sagt, ist Plattform Problem, das ist, was ich ab jetzt haben.

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) 

ich auch die App lokalen IIS-Server veröffentlicht wurde, ich den Anwendungspool integrierten Modus mit .net 4.0 gesetzt, habe ich versucht, zu aktivieren und zu deaktivieren ‚Enable 32-Bit-Anwendung‘, aber diese beiden didn‘ t Arbeit für mich.

Als ich Service.svc in der Lösung Explorer auswählen und Debuggen der Anwendung, erhalte ich unten Fehler in der WCF-Testclient

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 

ich den folgenden Befehl von readme.txt-Datei im Download ausführen können Ordner ohne irgendein Problem, und kann das Ergebnis sehen 'alpr -p tx -n 30 Beispiele/us-4.jpg'

Auch, wenn ich auf 32-Bit-Anwendung auf IIS aktivieren, bekomme ich Fehler sagen Projektname. dll wurde nicht geladen, andere würde 'openalpr-net.DLL' nicht fehlen. Ich veröffentliche Release - x64 nach IIS.

Kann mir jemand vorschlagen oder in die richtige Richtung zeigen? Was mache ich hier falsch?

Antwort

0

Ich kratzte mich über diese gleiche Frage, aber endlich funktionierte es;

Stellen Sie sicher, dass Sie einen Verweis auf die 64-Bit-openalpr-net.dll hinzufügen.

In Ihrem WCF Code sicherstellen, dass Sie die conf-Datei und runtime_data Ordner aus dem gleichen Ordner geladen werden, wo die Montage mit Hilfe dieses Codes ist

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)) 

Ihre wcf auf lokalen oder Remote-IIS veröffentlichen. Angenommen, Sie veröffentlichen es unter c: \ inetpub \ wwwroot \ alprService. Kopieren Sie die Datei openalpr.conf und den Ordner runtime_data in den Ordner c: \ inetpub \ wwwroot \ alprService \ bin \. Kopieren Sie die 3 dlls, libept170.dll, opencv_ffmpeg300_64.dll und opencv_world300.dll in den Ordner system32 auf dem Hosting-Server. Sie finden diese DLLs im selben Ordner wie Ihre openalpr-net.dll vom github.

Lassen Sie mich wissen, ob dies für Sie funktioniert. Ich kann ein Bild senden und eine Liste der Übereinstimmungen zurück erhalten.

Jetzt sollten Sie in der Lage sein, den WCF-Dienst ohne den Fehler zu laden.