[英]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
我既無法弄清為什么它無法運行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.