1

服务配置

<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 服务正在运行,防火墙已关闭。不确定缺少什么。

4

1 回答 1

4

您的实际服务正在监听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),这是默认设置 - 我在您的服务器端配置中看不到任何表明您正在使用流传输模式的配置。

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

于 2012-02-23T16:54:10.997 回答