c# - example - ¿Cómo utiliza CefSharp en un servicio WCF?
wcf step by step (2)
Pocos puntos,
IIS no puede acceder al escritorio
Así que no puedes ejecutar nada que necesite un escritorio. Su consola y la aplicación WPF tienen acceso a Desktop y se denominan procesos interactivos de usuario.
CEF necesita escritorio
Cef necesitará el Administrador de ventanas para crear una ventana, sin la cual no se puede mostrar la página. Esta es la razón, el error es engañoso aquí, ya que IIS no puede cargar ensamblajes dependientes que requieren Allow service to interact with Desktop
se seleccione Allow service to interact with Desktop
para el proceso de IIS en los Servicios de Windows.
La aplicación de consola es solo una opción con Login
Tendrá que ejecutar su aplicación como consola y deberá iniciar sesión en el escritorio, ya que permitir que IIS interactúe con el escritorio no es una buena opción y ni siquiera sé qué tipo de problemas podría tener.
Puede configurar su servidor para que inicie sesión automáticamente en algún usuario modificando el registro y configurando su aplicación de consola en su inicio. De esta manera, cada vez que se reinicie el servidor, su servidor iniciará sesión automáticamente para el usuario especificado y se iniciará la aplicación de la consola. (Windows 8.1 tiene poca dificultad pero obtendrá alguna solución).
Servicio personalizado de Windows con acceso a escritorio
Puede cambiar su tipo de aplicación al Servicio de Windows en lugar de a la Consola y puede instalar el servicio de Windows que permite el acceso al escritorio que se muestra en este artículo; tenga en cuenta que hay problemas de que esto solo funcionará si alguien está conectado al servidor.
http://www.codeproject.com/Articles/4891/Interact-With-Desktop-when-Installing-Windows-Serv
PhantomJS sin navegador
Hay un navegador sin cabeza PhantomJS que puede ejecutar en el Servicio IIS / Windows sin necesidad de interactuar con el escritorio, sin embargo, tendrá que cambiar su código a JavaScript en lugar de C #. También hay otras bibliotecas para administrar PhantomJS desde su aplicación.
Estoy tratando de usar el CefSharp.OffScreen(41.0.0)
dentro de una aplicación de servicio WCF, y obtengo el siguiente error al intentar ejecutar el servicio desde Visual Studio 2013:
No se pudo cargar el archivo o el ensamblaje ''CefSharp.BrowserSubprocess.Core.DLL'' o una de sus dependencias. El módulo especificado no se pudo encontrar.
Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.
Detalles de la excepción: System.IO.FileNotFoundException: No se pudo cargar el archivo o el ensamblaje ''CefSharp.BrowserSubprocess.Core.DLL'' o una de sus dependencias. El módulo especificado no se pudo encontrar.
El ensamblaje mencionado está presente en la carpeta bin del proyecto, así como en todos los ensamblajes requeridos listados en el sitio web de CefSharp . Si de hecho se requiere otro ensamblaje, no he descubierto qué es.
Algunos otros puntos que vale la pena mencionar:
- Es fácil de reproducir: comience con la plantilla de "Aplicación de servicio WCF" de VS2013 simplemente agregue el paquete de Nuget CefSharp.Offscreen.
- Yo construyo el proyecto en x86.
- CefSharp también depende de los redistribuibles de Visual Studio C ++ 2012. Copié esos archivos en la carpeta bin pero sigo teniendo el mismo error.
- He intentado las soluciones en la pregunta de SO here , en vano.
-
CefSharp
funciona bien cuando se hace referencia desde una aplicación de consola o una aplicación WPF.
Según github.com/cefsharp/CefSharp/issues/1127#issuecomment-122331752 , parece que la solución a este problema es ejecutar el código CefSharp en un subproceso [STAThread].