无法连接到托pipe在Docker容器中的WCF服务

我试图运行一个应用程序,在Docker容器中公开WCF服务。

该应用程序是使用TopShelf构build的,因此它既可以作为Windows服务运行,也可以作为独立的控制台程序(在开发中)运行。

我遇到的问题是WCFtesting客户端无法获取元数据。 值得一提的是,应用程序在本地执行时能正常工作。

这是当应用程序在本地运行时由WCFtesting客户端生成的元数据文件

<?xml version="1.0" encoding="utf-8"?> <configuration> <system.serviceModel> <bindings> <netTcpBinding> <binding name="NetTcpBinding_ITestWcfDocker" sendTimeout="00:05:00"> <security mode="None" /> </binding> </netTcpBinding> </bindings> <client> <endpoint address="net.tcp://localhost:9998/" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_ITestWcfDocker" contract="ITestWcfDocker" name="NetTcpBinding_ITestWcfDocker" /> </client> </system.serviceModel> </configuration> 

这是我使用构build容器的Dockerfile

 FROM microsoft/dotnet-framework:4.6.2 RUN powershell -Command Add-WindowsFeature NET-WCF-HTTP-Activation45 WORKDIR app COPY bin/Release/net461 . EXPOSE 9998 9999 ENTRYPOINT ["EMG.Service.TestWcfDocker.exe"] 

在构build项目之后,我使用此命令构build容器

 docker build -t emg/test-wcf:latest . 

然后我用这个命令启动一个容器

 docker run -p 9998:9998 -p 9999:9999 -t emg/test-wcf 

这是我在控制台日志上得到的输出

 Configuration Result: [Success] Name EMG.TestWcfDocker, [Success] DisplayName EMG TestWcfDocker, [Success] Description EMG TestWcfDocker, [Success] ServiceName EMG.TestWcfDocker Topshelf v4.0.0.0, .NET Framework v4.0.30319.42000 2017-05-15 15:46:48.0700|DEBUG|WcfServiceHost|Adding NetTcpBinding endpoint for ITestWcfDocker at net.tcp://localhost:9998/ 2017-05-15 15:46:48.1012|DEBUG|WcfServiceHost|Adding Metadata endpoint at http://localhost:9999/ 2017-05-15 15:46:49.2207|INFO|EMG.TestWcfDocker.Program|Starting EMG.TestWcfDocker The EMG.TestWcfDocker service is now running, press Control+C to exit. 2017-05-15 15:46:50.2675|INFO|EMG.TestWcfDocker.Program|EMG.TestWcfDocker started 

一旦容器启动,我用它来获取容器的IP

 docker inspect -f="{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" container-name 

然后我使用返回的IP通过WCFtesting客户端连接到服务,但我收到此错误消息

 Error: Cannot obtain Metadata from http://172.19.111.72:9999/ If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error URI: http://172.19.111.72:9999/ Metadata contains a reference that cannot be resolved: 'http://172.19.111.72:9999/'. There was no endpoint listening at http://172.19.111.72:9999/ that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. Unable to connect to the remote server A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 172.19.111.72:9999HTTP GET Error URI: http://172.19.111.72:9999/ There was an error downloading 'http://172.19.111.72:9999/'. Unable to connect to the remote server A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 172.19.111.72:9999 

如果我使用本地主机,我得到一个类似的错误。

TL;博士:

我有一个Docker容器中的WCF服务,我无法从主机连接到它。

Interesting Posts