无法从远程计算机获取元数据,但本地正常

时间:2011-10-27 09:26:59

标签: c# .net wcf networking tcp

所以这是我的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

1 个答案:

答案 0 :(得分:0)

该错误意味着:网络无法访问,这很可能是真正发生的事情。您的IP地址属于专用网络范围,这些地址永远不能直接从Internet / WAN寻址 - 它们仅用于LAN中的本地使用。要通过Internet访问此类地址,您必须配置公开的路由器/网关以接受连接并将其转发到您的内部设备= NAT /端口转发等。