net.tcp上没有端点侦听错误

时间:2012-02-23 16:28:19

标签: wcf net.tcp

服务配置

<service name="Services.MyService">
   <host>
      <baseAddresses>
         <add baseAddress="net.tcp://localhost:9000/Services/MyService/" />
      </baseAddresses>
    </host>
    <endpoint name="NetTcpService" 
        address="" 
        binding="netTcpBinding" 
        bindingConfiguration="TcpConfig"
        contract="Service.IMyService" />
    <endpoint 
        address="mex" 
        binding="mexTcpBinding" bindingConfiguration="TcpConfig" 
        contract="IMetadataExchange" />
  </service>

客户代码:

var endPoint = new EndpointAddress("net.tcp://localhost:9000/Services/MyService/mex");
var binding = new NetTcpBinding { TransferMode = TransferMode.Streamed, SendTimeout = TimeSpan.MaxValue };
var channel = new ChannelFactory<IMyService>(binding, endPoint);
var proxy = channel.CreateChannel();

错误:

  

没有端点侦听“net.tcp:// localhost / Services / MyService / mex”

tcp服务正在运行,防火墙已关闭。不确定缺少什么。

1 个答案:

答案 0 :(得分:3)

您的实际服务正在net.tcp://localhost:9000/Services/MyService/收听 - 因此请尝试将您的代码更改为:

var endPoint = new EndpointAddress("net.tcp://localhost:9000/Services/MyService/");
var binding = new NetTcpBinding { TransferMode = TransferMode.Buffered, SendTimeout = TimeSpan.MaxValue };
var channel = new ChannelFactory<IMyService>(binding, endPoint);
var proxy = channel.CreateChannel();

除了更改地址外,还可以使用TransferMode.Buffered(而不是Streamed)这是默认设置 - 我在服务器端配置中看不到任何可能表明你的配置# 39;重新使用流传输模式。

地址net.tcp://localhost:9000/Services/MyService/mex元数据交换地址 - 而不是您的服务。您的客户端需要此端点才能查询服务以了解它提供的服务方法类型,预期的参数等等 - 创建客户端代理代码所需的一切。但这是您实际服务所在的服务地址并响应请求。