← Zurück

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

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

Написал робота на последней версии 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, чтобы подсмотреть, у меня нет и я не знаю куда копать. Помогите!

War dieses Thema hilfreich?

Thema teilen

Kommentare (5)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Павел
Павел Autor

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

Sprite
Sprite

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

Павел
Павел
Павел Autor

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

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

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

Sprite
Sprite

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

Павел
Павел
Павел Autor

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