服务配置
<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服务正在运行,防火墙已关闭。不确定缺少什么。
答案 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
是元数据交换地址 - 而不是您的服务。您的客户端需要此端点才能查询服务以了解它提供的服务方法类型,预期的参数等等 - 创建客户端代理代码所需的一切。但这是不您实际服务所在的服务地址并响应请求。