如何在WCF服务中使用CefSharp?

时间:2015-07-15 20:37:13

标签: c# .net wcf cefsharp

我正在尝试在WCF服务应用程序中使用CefSharp.OffScreen(41.0.0) Nuget包,并且在尝试从Visual Studio 2013运行服务时出现以下错误:

  

无法加载文件或程序集'CefSharp.BrowserSubprocess.Core.DLL'   或其中一个依赖项。找不到指定的模块。

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.IO.FileNotFoundException:无法加载   文件或程序集'CefSharp.BrowserSubprocess.Core.DLL'或其中一个   依赖。找不到指定的模块。

提到的程序集存在于项目的bin文件夹中,以及CefSharp's Website上列出的所有必需程序集。如果实际上还需要另一个组件,我还没弄清楚它是什么。

值得一提的其他几点:

  • 很容易重现:从VS2013的“WCF服务应用程序”模板开始,只需添加CefSharp.Offscreen Nuget Package。
  • 我在x86中构建项目。
  • CefSharp还依赖于Visual Studio C ++ 2012可再发行组件。 我将这些文件复制到bin文件夹中但仍然遇到同样的错误。
  • 我在SO问题here中尝试了解决方案,但没有用。
  • 从控制台应用程序或WPF引用时,
  • CefSharp正常工作 应用

2 个答案:

答案 0 :(得分:3)

几点,

IIS无法访问桌面

因此,您无法运行需要桌面的任何内容。您的控制台和WPF应用程序可以访问桌面,并称为用户交互式进程。

CEF需要桌面

Cef将需要Window管理器来创建窗口,没有它就无法呈现页面。这就是原因,错误在这里会产生误导,因为IIS无法加载需要桌面交互的依赖程序集,除非为Windows服务中的IIS进程选择了Allow service to interact with Desktop

控制台应用程序仅适用于登录

您必须将您的应用程序作为控制台运行,您需要登录桌面,允许IIS与桌面交互不是一个好选择,我甚至不知道它可能会遇到什么样的问题。 / p>

您可以通过修改注册表并在启动时设置控制台应用程序,将服务器设置为自动登录某些用户。因此,这样每次服务器都将重新启动,您的服务器将自动登录到指定的用户,您的控制台应用程序将启动。 (Windows 8.1没有什么困难,但你会得到一些解决方案)。

使用桌面访问的自定义Windows服务

您可以将应用程序类型更改为Windows服务而不是控制台,并且可以安装允许访问本文所示桌面的Windows服务,请注意,只有在有人登录到服务器时才会出现问题。

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

PhantomJS无头浏览器

PhantomJS无头浏览器可以在IIS / Windows服务中运行而无需与桌面交互,但是您需要将代码转换为JavaScript而不是C#。还有其他库可以从您的应用程序管理PhantomJS。

答案 1 :(得分:0)

根据this link,似乎解决这个问题的方法是在[STAThread]线程中运行CefSharp代码。