Подтвердить что ты не робот

Как вы используете CefSharp в службе WCF?

Я пытаюсь использовать пакет CefSharp.OffScreen(41.0.0) Nuget Package в приложении службы WCF, и при попытке запустить службу из Visual Studio 2013 я получаю следующую ошибку:

Не удалось загрузить файл или сборку "CefSharp.BrowserSubprocess.Core.DLL" или одной из его зависимостей. Указанный модуль не найден.

Описание: Необработанное исключение произошло во время выполнения текущий веб-запрос. Просмотрите трассировку стека информацию об ошибке и где она возникла в коде.

Сведения об исключении: System.IO.FileNotFoundException: не удалось загрузить файл или сборку "CefSharp.BrowserSubprocess.Core.DLL" или один из его зависимостей. Указанный модуль не найден.

Указанная сборка присутствует в папке bin проекта, а также все необходимые сборки, перечисленные на веб-сайт CefSharp. Если на самом деле требуется еще одна сборка, я не понял, что это такое.

Несколько других замечаний:

  • Легко воспроизвести: Начните с VS2013 "Приложение WCF Service Application", просто добавив пакет CefSharp.Offscreen Nuget.
  • Я создаю проект в x86.
  • CefSharp также зависит от распространяемых компонентов Visual Studio С++ 2012. Я скопировал эти файлы в папку bin, но все равно получаю ту же ошибку.
  • Я попробовал решения в вопросе SO здесь, безрезультатно.
  • CefSharp отлично работает при использовании Консольного приложения или WPF Применение.
4b9b3361

Ответ 1

Несколько точек,

IIS не может получить доступ к Desktop

Таким образом, вы не можете запускать все, что требует рабочего стола. Консоль и приложение WPF имеют доступ к Desktop и называются интерактивными процессами пользователя.

CEF нужен рабочий стол

Cef потребуется Window Manager для создания окна, без которого он не может отображать страницу. По этой причине ошибка вводит в заблуждение, поскольку IIS не может загружать зависимые сборки, для которых требуется взаимодействие с рабочим столом, если для процесса IIS в службах Windows не выбрано 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 вместо С#. Существуют и другие библиотеки для управления PhantomJS из вашего приложения.

Ответ 2

В соответствии с эта ссылка кажется, что решение этой проблемы - запустить код CefSharp в потоке [STAThread].