无法从 Docker 中的 .NET CORE Web API 连接到 WCF 服务

Can't conncet to WCF service from .NET CORE Web API in Docker

我有 WCF 服务。接下来,我有 .NET CORE WEB API 项目。 Web API 调用 WCF 服务。在当地一切正常。然后我把 Web API 放在 docker 容器中 ,Web API 可以工作,但是 无法通信 使用 WCF 服务。

在过去的版本中,docker 一切正常。我检查过,docker 容器可以访问互联网(ping、wget...)。

Dcoker 版本:

Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:31 2019
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 04:13:06 2019
  OS/Arch:          linux/amd64
  Experimental:     false

来自 API 的错误:

 An unhandled exception was thrown by the application.
System.ServiceModel.CommunicationException: Cannot assign requested address 
---> System.Net.Http.HttpRequestException: Cannot assign requested address
---> System.Net.Sockets.SocketException: Cannot assign requested address
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.ServiceModel.Channels.ServiceModelHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   at System.ServiceModel.Channels.HttpChannelFactory`1.HttpClientRequestChannel.HttpClientChannelAsyncRequest.SendRequestAsync(Message message, TimeoutHelper timeoutHelper)
   --- End of inner exception stack trace ---
   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)

这是我的 docker 文件 - 之前使用的相同文件:

FROM microsoft/dotnet:2.1-aspnetcore-runtime-stretch-slim AS base
WORKDIR /app
EXPOSE 80
COPY ["BlackFoxWebAPI/KerasEvaluator.zip", "/app/"]
FROM microsoft/dotnet:2.1-sdk-stretch AS build
WORKDIR /src
COPY ["BlackFoxWebAPI/BlackFoxWebAPI.csproj", "BlackFoxWebAPI/"]
COPY ["BlackFoxWebAPIModels/BlackFoxWebAPIModels.csproj", "BlackFoxWebAPIModels/"]
COPY ["KerasAPIClient/KerasAPIClient.csproj", "KerasAPIClient/"]
RUN dotnet restore "BlackFoxWebAPI/BlackFoxWebAPI.csproj"
COPY . .

WORKDIR "/src/BlackFoxWebAPI"
RUN dotnet build "BlackFoxWebAPI.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "BlackFoxWebAPI.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .

ENTRYPOINT ["dotnet", "BlackFoxWebAPI.dll"]

已解决

问题是在 Visual Studio 中设置服务引用。在 ConnectedService.json 中更改 WCF 地址后,您必须为每个环境更新 Microsoft WCF 提供程序。我没有更新 docker relese env,并且 relese 使用了一些旧参考 - NOT 来自 ConnectedService.json.

的参考