所以这是我的App.config:
<?xml version="1.0"?>
<configuration>
<runtime>
</runtime>
<system.serviceModel>
<diagnostics performanceCounters="Default" />
<bindings />
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<behaviors>
<endpointBehaviors>
<behavior name="CrossDomainServiceBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="AService.AServBehavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyService.MyServiceBehavior" name="MyService.MyServ">
<endpoint address="MyService" behaviorConfiguration="" binding="netTcpBinding" contract="AService.IAServ" isSystemEndpoint="false" />
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
正如你所看到的,没什么特别的。我只想用tcp绑定创建简单的服务,并能够传输元数据信息。我使用basicHttpBinding
获得了同样的成功,一切都很顺利。
这是使用baseaddress创建服务实例的代码:
Console.WriteLine("net.tcp://" + _bindAddress + "/");
ServiceHost myserviceHost = new ServiceHost(typeof(MyService), new Uri(String.Concat("net.tcp://", _bindAddress, "/")));
myserviceHost.Open();
_bindAddress
是来自自定义服务配置XML文件的字符串。我正在尝试将服务绑定到IP地址172.19.0.102:8733
的内部网络接口。然后我试图在服务的机器上使用来自地址127.0.0.1:8733
的WcfTestClient来获取服务元数据,并且一切都很好。但后来我试图通过互联网获取目标远程机器上的服务元数据我获得了TCP error with code 10051
。
我的目标是让服务工作并通过Internet为任何客户发布元数据。防火墙和其他网络问题没有问题。似乎我需要一些配置编辑来允许与每个人的服务共享元数据。
提前谢谢!
POST EDIT:
这是我的尝试:
1)配置为在172.19.0.102:8733
绑定的服务。
A. WCF测试客户端尝试从地址net.tcp://127.0.0.1:8733/
获取TCP error code 10061
失败的托管计算机上的元数据。
B.在同一台机器上,WCF客户端尝试从net.tcp://172.19.0.102:8733
获取元数据并且它正常工作。
C. WCF测试客户端试图从地址net.tcp://192.168.1.2:8733/
(它的服务的机器IP地址)中获取LAN中另一台机器上的元数据,这会给出错误TCP error code 10061
。
答案 0 :(得分:0)
该错误意味着:网络无法访问,这很可能是真正发生的事情。您的IP地址属于专用网络范围,这些地址永远不能直接从Internet / WAN寻址 - 它们仅用于LAN中的本地使用。要通过Internet访问此类地址,您必须配置公开的路由器/网关以接受连接并将其转发到您的内部设备= NAT /端口转发等。