【发布时间】:2019-11-24 07:40:09
【问题描述】:
我有 WCF 服务。接下来,我有 .NET CORE WEB API 项目。 Web API 调用 WCF 服务。在本地 evrything 工作正常。然后我将 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"]
【问题讨论】:
-
您在哪里托管 wcf 服务?如果您请求一个不调用 wcf 服务的方法,它会起作用吗?尝试运行
docker logs containername并与我们分享结果。 -
@TaoZhou 1. wcf 服务托管在远程机器上 - 而不是在 docker 中。 2. 如果请求一个不调用 wcf 服务的方法,它可以工作 3. API 错误: 是来自容器的日志
-
把请求wcf服务的代码分享给我们,你们为wcf服务实现了安全吗?
标签: c# docker wcf asp.net-core-2.0 asp.net-core-webapi