2015-07-15 6 views
18

Ich versuche, die CefSharp.OffScreen(41.0.0) Nuget Paket innerhalb eines WCF Service-Anwendung zu verwenden, und ich die folgende Fehlermeldung bekommen beim Versuch, den Service von Visual Studio 2013 ausgeführt wird: ‚Wie verwenden Sie CefSharp in einem WCF-Dienst?

konnte nicht geladen werden Datei oder Assembly CefSharp .BrowserSubprocess.Core.DLL ' oder einer seiner Abhängigkeiten. Das ausgewählte Module kann nicht gefunden werden.

Beschreibung: Bei der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Bitte überprüfen Sie die Stack-Trace für weitere Informationen über den Fehler und wo es im Code entstanden ist.

Ausnahmedetails: System.IO.FileNotFoundException: Könnte Datei oder Assembly ‚CefSharp.BrowserSubprocess.Core.DLL‘ oder einem seiner Abhängigkeiten nicht laden. Das ausgewählte Module kann nicht gefunden werden.

Die angegebene Baugruppe befindet sich im Ordner bin des Projekts sowie in allen erforderlichen Baugruppen, die unter CefSharp's Website aufgeführt sind. Wenn es tatsächlich eine andere Versammlung benötigt, habe ich nicht herausgefunden, was es ist.

Einige andere Punkte erwähnenswert:

  • Es ist leicht zu reproduzieren: Beginnen Sie mit VS2013 der „WCF Service Application“ Vorlage hinzugefügt einfach die CefSharp.Offscreen Nuget Paket.
  • Ich baue das Projekt in x86.
  • CefSharp hängt auch von den Redistributables von Visual Studio C++ 2012 ab. Ich kopierte diese Datei in den Ordner bin, aber immer noch den gleichen Fehler.
  • Ich versuchte die Lösungen in der SO-Frage here, vergeblich.
  • CefSharp funktioniert gut, wenn von einer Konsolenanwendung oder WPF Anwendung referenziert wird.
+0

Cef.Initialize() hat einen performDependencyCheck-Parameter. Gibt es einen Fehler zurück? – amaitland

+0

Dem Projekt wurde noch kein Code hinzugefügt (außer dem, was mit der WCF-Dienstanwendungsvorlage geliefert wird). Ich habe nur die CefSharp-Referenzen durch das CefSharp.Offscreen-nugget-Paket hinzugefügt. – Galen

+0

Wenn Sie die Projektreferenzen vergleichen, sind sie identisch mit Ihrer Konsolen-App? Es sollte nur 'CefSharp',' CefSharp.Core' und 'CefSharp.OffScreen' geben? Es sollte keinen Verweis auf den 'BrowserSubProcess' geben, er wird erzeugt, wenn Ihre Anwendung läuft, es ist keine Abhängigkeit. – amaitland

Antwort

3

Nur wenige Punkte,

IIS nicht Desktop- zugreifen können

So kann man nichts ausführen, die einen Desktop benötigt. Ihre Konsole und WPF-Anwendung hat Zugriff auf Desktop und wird als interaktive Benutzerprozesse bezeichnet.

CEF benötigt Desktop

Cef wird Windowmanager müssen Fenster erstellen, ohne die es nicht Seite machen kann. Aus diesem Grund ist der Fehler hier irreführend, da IIS keine abhängigen Assemblys laden kann, für die eine Desktop-Interaktion erforderlich ist, es sei denn, Allow service to interact with Desktop ist für den IIS-Prozess in Windows Services ausgewählt.

-Konsole ist nur Option mit Anmeldung

Sie müssen Ihre Anwendung als Konsole auszuführen, und Sie werden auf dem Desktop anmelden müssen, IIS ermöglicht mit Desktop zu interagieren keine gute Wahl ist und I don‘ Ich weiß nicht, welche Probleme es haben könnte.

Sie können Ihren Server für die automatische Anmeldung bei einem Benutzer einrichten, indem Sie die Registrierung ändern und Ihre Konsolenanwendung beim Start festlegen. Auf diese Weise wird der Server jedes Mal neu gestartet, wenn sich der Server automatisch bei dem angegebenen Benutzer anmeldet und die Konsolenanwendung startet. (Windows 8.1 hat wenig Schwierigkeiten, aber Sie werden eine Lösung finden).

Benutzerdefinierte Windows-Dienst mit Desktop Access

Sie können Ihre Anwendung Typ Windows-Dienst statt Konsole ändern und Sie können Ihre Windows-Dienst installieren, die in diesem Artikel gezeigten Zugriff auf Desktop ermöglicht, passen, gibt es Probleme Das funktioniert nur, wenn jemand am Server angemeldet ist.

http://www.codeproject.com/Articles/4891/Interact-With-Desktop-when-Installing-Windows-Serv

PhantomJS Headless Browser

Es gibt PhantomJS kopflos Browser, der Sie in IIS/Windows-Dienst ohne Notwendigkeit, mit Desktop zu interagieren ausführen können, aber Sie werden Ihren Code JavaScript verschieben müssen stattdessen von C#. Es gibt auch andere Bibliotheken, die PhantomJS von Ihrer App aus verwalten.

+0

Muss CefSharp.Offscreen weiterhin auf den Desktop zugreifen? Ich dachte, dass es keine Fenster erstellt hat. Korrigiere mich, wenn ich falsch liege. – Galen

+0

Ist der IIS-Dienst, auf den Sie sich beziehen, "Windows Process Activation Service" genannt? Ich sehe keine Dienste, die IIS in ihrem Namen enthalten. – Galen

+0

Es ist World Wide Web Service, denke ich, und selbst wenn es CefSharp.Offscreen sagt, zeigt es einfach nicht Fenster, aber es braucht Desktop Ich denke, weil Windows wird nicht relevante GUI-Bibliotheken benötigt. Ich bin mir nicht sicher, aber ich werde später nachsehen. –

0

Nach this link scheint es, dass die Lösung für dieses Problem ist, den CefSharp-Code in einem Thread [STAThread] auszuführen.

Verwandte Themen