Использование веб-службы 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"]

0 ответов

Другие вопросы по тегам