簡體   English   中英

如何在 WCF 服務中使用 CefSharp?

[英]How do you use CefSharp in a WCF Service?

我正在嘗試在 WCF 服務應用程序中使用CefSharp.OffScreen(41.0.0) Nuget 包,並且在嘗試從 Visual Studio 2013 運行該服務時出現以下錯誤:

無法加載文件或程序集“CefSharp.BrowserSubprocess.Core.DLL”或其依賴項之一。 指定的模塊無法找到。

說明:在執行當前 Web 請求期間發生未處理的異常。 請查看堆棧跟蹤以獲取有關錯誤及其在代碼中的來源的更多信息。

異常詳細信息:System.IO.FileNotFoundException:無法加載文件或程序集“CefSharp.BrowserSubprocess.Core.DLL”或其依賴項之一。 指定的模塊無法找到。

提到的程序集存在於項目的 bin 文件夾中,以及CefSharp 網站上列出的所有必需程序集。 如果實際上需要另一個程序集,我還沒有弄清楚它是什么。

還有幾點值得一提:

  • 很容易重現:從VS2013的“WCF服務應用程序”模板開始,簡單地添加了CefSharp.Offscreen Nuget Package。
  • 我在 x86 中構建項目。
  • CefSharp 還依賴於 Visual Studio C++ 2012 可再發行組件。 我將這些文件復制到 bin 文件夾中,但仍然出現相同的錯誤。
  • 我在這里嘗試了 SO 問題中的解決方案,但無濟於事。
  • 當從控制台應用程序或 WPF 應用程序引用時, CefSharp工作正常。

幾點,

IIS 無法訪問桌面

所以你不能運行任何需要桌面的東西。 您的控制台和 WPF 應用程序可以訪問桌面並稱為用戶交互進程。

CEF 需要桌面

Cef 需要窗口管理器來創建窗口,沒有它就不能渲染頁面。 這就是原因,這里的錯誤具有誤導性,因為 IIS 無法加載需要桌面交互的依賴程序集,除非在 Windows 服務中為 IIS 進程選擇了Allow service to interact with Desktop

控制台應用程序是登錄的唯一選項

您必須將應用程序作為控制台運行,並且需要登錄到桌面,允許 IIS 與桌面交互不是一個好的選擇,我什至不知道它可能有什么樣的問題。

您可以通過修改注冊表將您的服務器設置為自動登錄到某個用戶,並在啟動時設置您的控制台應用程序。 這樣每次服務器重新啟動時,您的服務器將自動登錄到指定的用戶,您的控制台應用程序將啟動。 (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。

根據此鏈接,此問題的解決方案似乎是在 [STAThread] 線程中運行 CefSharp 代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM