Я создал приложение службы C # WCF для Windows в VS 2017 и добавил поддержку Docker.
Был создан следующий Dockerfile:
FROM microsoft/dotnet-framework:4.7.1-windowsservercore-1709
ARG source
WORKDIR /app
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["C:\\WcfService.exe"]
Когда я создаю его с помощью docker-compose в VS, я получаю сообщение об ошибке:
Невозможно запустить службу из командной строки или отладчика. Сначала необходимо установить службу Windows (с помощью installutil.exe), а затем запустить ее с помощью ServerExplorer, инструмента администрирования служб Windows или команды NET START. Программа «[2172] WcfService.exe» завершилась с кодом 0 (0x0).
Я открыл PowerShell и набрал docker ps
- контейнер запущен. Итак, я использовал команду New-Service
и создал «TestService». Когда я использую Get-Service
для просмотра всех служб, я вижу их в списке в режиме «Остановлено». Когда я использую Start-Service TestService
, я получаю следующую ошибку:
Start-Service: не удалось запустить службу TestService (TestService). В строке: 1 символ: 1 + Start-Service TestService + ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: OpenError: (System.ServiceProcess.ServiceController: ServiceController) [Start-Service], ServiceCommandException + FullyQualifiedErrorId: StartServiceFailed, Microsoft.PowerShell.Commands.StartServiceCommand
Пытался найти информацию, но ничего не работает. Любые идеи?
TestService
илиWcfService
? При запуске служба регистрируется в контроллере службы под определенным именем и запускается только при вызове с использованием этого имени. Вы не можете зарегистрировать исполняемый файл под произвольным именем службы, это должно быть именно то имя службы, которое он использует. (Однако имя исполняемого файла не имеет значения.) - person Jeroen Mostert   schedule 31.05.2018installutil
и т. Д. До точки входа. Кроме того, ваша точка входа также не должна быть исполняемым файлом вашей службы. - person Gregory Suvalian   schedule 31.05.2018Get-EventLog -LogName System -Newest 10 -Source "Service Control Manager" | Select *
, загляните вApplication
, если служба что-то записала в журнал), чтобы узнать, в чем на самом деле ошибка. Тайм-аут предполагает конфликт имен, но это может быть что-то еще. - person Jeroen Mostert   schedule 31.05.2018DOCKERFILE
. Вам нужно заменить ENTRYPOINT чем-то другим, кроме исполняемого файла вашей службы. Например, используйтеservicemonitor
исполняемый файл из образа IIS. ВХОДНАЯ ТОЧКА [C: \\ ServiceMonitor.exe, w3svc]. Замените w3svc своим именем службы - person Gregory Suvalian   schedule 31.05.2018