簡體   English   中英

C#+ C ++中的Windows服務拒絕在Docker中啟動

[英]Windows service in C# + C++ is refusing to start in Docker

我在VS 2017中創建了一個包含2個主要項目(和常見項目)的解決方案。 該體系結構說明了一個非常大的遺留項目,因此無法更改。 主項目是一個.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命令啟動。

但是仍然創建了容器。

我在創建的Docker容器中打開PowerShell,並使用“ New-Service”創建新服務並將其指向我的.exe文件。 當我嘗試運行啟動服務時,出現錯誤。

我使用Windows事件日志獲取錯誤描述:

EntryType:錯誤消息:服務無法啟動。 System.Reflection.TargetInvocationException:調用的目標引發了異常。 ---> System.IO.FileNotFoundException:無法加載文件或程序集“ testole.dll”或其依賴項之一。 指定的模塊無法找到。 在WcfService.WcfXmlServerFacade..ctor()處-內部異常堆棧跟蹤結束-在System.RuntimeMethodHandle.InvokeMethod處(Object target,Object []參數,Signature sig,Boolean構造函數)在System.Reflection.RuntimeConstructorInfo.Invoke處(位於System.ServiceModel.Description.ServiceDescription.CreateImplementation(類型serviceType)(位於System.ServiceModel.Description.ServiceDescription.SetupSingleton(ServiceDescription serviceDescription,對象實現,布爾值isWellKnown)上)(BindingFlags invokeAttr,Binder活頁夾,Object []參數,CultureInfo文化) System.ServiceModel.ServiceHost.CreateDescription(IDictionary`2&implem ...處的System.ServiceModel.Description.ServiceDescription.GetService(類型serviceType)來源:WcfService1

  • “ testole.dll”是我的C ++項目編譯的。 **我已經檢查了容器中.exe文件的同一目錄中是否存在'testole.dll'。

我既無法弄清為什么它無法運行C ++ dll,也無法弄清楚如何獲得有關該錯誤的更多信息(Console.Writeine()\\ Debug.Writeine())由於某種原因而無效。

提前致謝。

很可能您缺少Visual C ++可再發行組件包。 我懷疑Windows docker映像上默認未安裝它。

嘗試在FROM行下面添加以下行(用於下載VC ++ 2015 Update 3 x64)到您的Dockerfile中:

ADD https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe /vc_redist.x64.exe
RUN C:\vc_redist.x64.exe /quiet /install

來源( https://github.com/Microsoft/dotnet-framework-docker/issues/15

暫無
暫無

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

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