Прошу помощи с контейнеризацией

Прошу помощи с контейнеризацией
Atom
1/9/2021
Павел


Здравствуйте!

Написал робота на последней версии S#. Использую Transaq Connector. Пытаюсь завернуть приложение в контейнер Docker. Локально, без контейнера, все работает отлично. Но при попытке соединения в приложении в контейнере выдает ошибку. Приходит exception на событие Connector.ConnectionError:

Error load library txmlconnector.dll. (Parameter 'dllPath')
   at Ecng.Interop.Marshaler.LoadLibrary(String dllPath)
   at Ecng.Interop.DllLibrary..ctor(String dllPath)
   at #=z$v7B9Iu3PqOtBWiwGjTeuTIBQG7A..ctor(String #=zWUnOCRY=, #=zGon05jN$zqu0 #=z$SosFX8=)
   at #=zfFAR89tKbzSwRbMRwZT08jN8htD7UjYzvw==..ctor(Action`1 #=z$SosFX8=, Action`1 #=zuVX1g4Bj32l1, String #=zWUnOCRY=, Boolean #=z1BrZqexflzIZ, Boolean #=zpNZ3xedpXleK, String #=zEYFvlw2lUDMt, ApiLogLevels #=z9eSLFMNKlQa7)
   at StockSharp.Transaq.TransaqMessageAdapter.#=zAxO2KDE=()
   at StockSharp.Transaq.TransaqMessageAdapter.OnSendInMessage(Message message)
   at StockSharp.Messages.MessageAdapter.SendInMessage(Message message)

Dockerfile стандартный:


FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
WORKDIR C:/app

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR C:/src
COPY ["OrdersExecutor.csproj", ""]
RUN dotnet restore "./OrdersExecutor.csproj"
COPY . .
WORKDIR "C:/src/."
RUN dotnet build "OrdersExecutor.csproj" -c Release -o C:/app/build

FROM build AS publish
RUN dotnet publish "OrdersExecutor.csproj" -c Release -o C:/app/publish

FROM base AS final
WORKDIR C:/app
RUN dir
COPY --from=publish C:/app/publish .
ENTRYPOINT ["dotnet", "OrdersExecutor.dll"]

Пробовал запускать на разных runtime (nano, core), не помогает. Код, собранный в конейнере (и выдернутый из него), запускается на локальной машине отлично. Т.е. проблема именно в среде выполнения и методе загрузки txmlconnector.dll. Исходников Ecng.Interop, чтобы подсмотреть, у меня нет и я не знаю куда копать. Помогите!




Thanks:


Павел

Avatar
Date: 1/9/2021
Reply


Автора первого полезного ответа ждет вознаграждение.

Thanks:

Sprite

Avatar
Date: 1/9/2021
Reply


Такая же ошибка возникает если завернуть приложение в UWP Попробуйте жестко задать путь к txmlconnector.dll https://doc.stocksharp.ru/html/P_StockSharp_Transaq_TransaqMessageAdapter_DllPath.htm

Thanks: Павел

Павел

Avatar
Date: 1/9/2021
Reply


sprite: Такая же ошибка возникает если завернуть приложение в UWP Попробуйте жестко задать путь к txmlconnector.dll https://doc.stocksharp.ru/html/P_StockSharp_Transaq_TransaqMessageAdapter_DllPath.htm

Спасибо за наводку!

Но не помогло. Попробовал принудительно задать абсолютный и относительные пути, разные варианты с косыми и прямыми чертами, пробовал заранее копировать dll в контейнер. Не помогло :(.

Thanks:

Sprite

Avatar
Date: 1/9/2021
Reply


Еще может надо копать в сторону Docker + C++ MSVC, так как есть подозрение что transaqxml.dll это использует. https://devblogs.microsoft.com/cppblog/using-msvc-in-a-docker-container-for-your-c-projects/ Но я не знаю и сам не пробовал.

Thanks: Павел

Павел

Avatar
Date: 1/11/2021
Reply


Кстати, я даже попробовал установить все версии vcredist в контейнер, не помогло.

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy