问题描述
我有以下结构:
- .NET Core 5.0 Web API
- Docker 容器 Linux
Web API 位于 Docker Linux 容器中。
我正在尝试从 Dynamics NAV 2017 中的 SOAP Web 服务 获取数据,但是我在 Linux 容器中使用 NTLM 身份验证时遇到了困难。
我需要连接到 Web 服务 (CatalogItem) 并从方法 ReadMultiple() 获取数据,如下图所示:
此 Web API 将托管在 Linux 服务器上,因此需要在 Docker Linux 容器上运行。
我使用 .NET Core 提供的添加服务引用工具创建了到 Web 服务的连接,该工具生成了一个包含 Reference.cs 和 的文件夹ConnectedService.json 文件。
当我运行应用程序并在 Swagger UI 中打开它时,出现以下错误:
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,Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker,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)
我一直在搜索什么,我需要在我的 Docker 容器中使用 Kerberos 客户端或安装 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"]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)