Использование веб-службы SOAP внутри контейнера .NET Core Docker Linux.
У меня есть следующая структура :
- Веб-API .NET Core 5.0
- Докер-контейнер Linux
Веб-API находится внутри контейнера Docker Linux .
Я пытаюсь получить данные из веб-службы SOAP в Dynamics NAV 2017, но у меня возникают проблемы с использованием проверки подлинности NTLM с контейнером Linux.
Мне нужно подключиться к веб-службе (CatalogItem) и получить данные из метода ReadMultiple(), как показано на изображении ниже:
Этот веб-API будет размещен на сервере Linux, поэтому его необходимо запускать в контейнере Docker Linux.
Я создал подключение к веб-службе с помощью инструмента « Добавить ссылку на службу» , предоставляемого .NET Core, который создает папку с файлами Reference.cs и ConnectedService.json .
Когда я запускаю приложение и открываю его в пользовательском интерфейсе Swagger, я получаю следующую ошибку :
System.PlatformNotSupportedException: NTLM authentication is not possible with default credentials on this platform.
at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannelProxy.TaskCreator.<>c__DisplayClass1_0.<CreateGenericTask>b__0(IAsyncResult asyncResult)
--- End of stack trace from previous location ---
at ServiceDBTest.Controllers.WeatherForecastController.CatalogItem() in /src/ServiceDBTest/Controllers/WeatherForecastController.cs:line 34
at lambda_method5(Closure , Object )
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
То, что я искал, мне нужно использовать клиент Kerberos в моем контейнере Docker или установить CNTLM, но я не уверен. Что мне нужно сделать, чтобы это произошло?
Вот файл docker-compose :
version: "3.5"
services:
servicedb:
container_name: servicedb
build:
context: ./ServiceDBTest/ServiceDBTest
dockerfile: Dockerfile
args:
- ASPNETCORE_ENVIRONMENT_ARG=development
ports:
- 5000:80
volumes:
- "./ServiceDBTest/ServiceDBTest:/ServiceDBTest"
environment:
- HOST=0.0.0.0
А вот и Dockerfile :
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
ARG ASPNETCORE_ENVIRONMENT_ARG
ENV ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT_ARG}
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["./ServiceDBTest.csproj", "ServiceDBTest/"]
RUN dotnet restore "ServiceDBTest/ServiceDBTest.csproj"
COPY . .
WORKDIR "/src/ServiceDBTest"
COPY . .
RUN dotnet build "ServiceDBTest.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ServiceDBTest.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ServiceDBTest.dll"]