Я создал решение в VS 2017 с двумя основными проектами (и обычными).Архитектура иллюстрирует очень большой устаревший проект, поэтому не может быть изменен.Основной проект - это исполняемый файл .Net, его основной класс наследует от класса «ServiceBase», чтобы использовать его в качестве службы Windows.Он определяет конечную точку WCF и использует интерфейс IWcfXmlServer для обработки запроса.Другой проект - это проект C ++ с классом, который реализует интерфейс 'IWcfXmlServer' и используется для обработки запроса.
Я создал службу Windows локально и указал ее на файл .exe решения, и это сработалохорошо.
Следующий шаг - поместить это приложение в контейнер Docker.Я добавил поддержку Docker, которая добавила "docker-compose" .yml файл:
version: '3.4'
services:
wcfservice:
image: ${DOCKER_REGISTRY}wcfservice
build:
context: .\..\WcfService
dockerfile: Dockerfile
и Dockerfile:
FROM microsoft/dotnet-framework:4.7.1-windowsservercore-1709
ARG source
WORKDIR /app
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["C:\\app\\WcfService.exe"]
Когда я собираю решение и начинаю отладку, я получаю:
Невозможно запустить службу из командной строки или отладчика.Сначала необходимо установить службу Windows (с помощью installutil.exe), а затем запустить ее с помощью ServerExplorer, средства администрирования служб Windows или команды NET START.
, но контейнер все равно создается.
Я открыл PowerShell в созданном контейнере Docker и использовал «New-Service», чтобы создать новый сервис и указать его на мой файл .exe.Когда я пытаюсь запустить Start-Service, я получаю сообщение об ошибке.
Я использовал журнал событий Windows, чтобы получить описание ошибки:
EntryType: Сообщение об ошибке: Невозможно запустить службу.System.Reflection.TargetInvocationException: исключение было сгенерировано целью вызова.---> System.IO.FileNotFoundException: Не удалось загрузить файл или сборку 'testole.dll' или одну из ее зависимостей.Указанный модуль не может быть найден.в WcfService.WcfXmlServerFacade..ctor () --- Конец трассировки стека внутренних исключений --- в System.RuntimeMethodHandle.InvokeMethod (аргументы объекта, аргументы Object [], сигнатура сигнатуры, логический конструктор) в System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, связыватель Binder, параметры Object [], культура CultureInfo) в System.ServiceModel.Description.ServiceDescription.CreateImplementation (Тип serviceType) в System.ServiceModel.Description.ServiceDescription.SetupSingleton (реализация объекта ServiceWellWessing)System.ServiceModel.Description.ServiceDescription.GetService (тип serviceType) в System.ServiceModel.ServiceHost.CreateDescription (IDictionary`2 & Implem ... Источник: WcfService1
- 'testole.dll' являетсяМой c ++ проект скомпилирован. ** Я уже проверил, что «testole.dll» присутствует в том же каталоге файла .exe внутри контейнера.
Я не могу понять ни, почему это не удаетсявзапустить DLL C ++, ни как получить больше информации об ошибке (Console.Writeine () \ Debug.Writeine ()) по какой-то причине не работает.
Заранее спасибо.