WCF客户端将在运行时获得端点地址,因此类似于“net”。tcp://mymachine:10001/MyService或“净”。pipe://localhost/MyService". 我认为它应该只使用基于Uri方案的正确的NetTcpBinding或NetNamedPipeBinding,但看起来不是这样。
我不能将代理设置为接受命名管道或tcp绑定,并根据端点地址选择一个绑定吗?
编辑:好的,我嗅探方案并填充绑定:
var uri = new Uri("net.tcp://localhost:10001/MyService");
Binding b;
if (uri.Scheme == Uri.UriSchemeNetPipe) {
b = new NetNamedPipeBinding();
} else if (uri.Scheme == Uri.UriSchemeNetTcp) {
b = new NetTcpBinding();
} else if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps) {
b = new WSHttpBinding();
}
var proxy = new ClientProxy(b, new EndpointAddress(uri));
通信对象System.ServiceModel.Channels.ServiceChannel无法用于通信,因为它处于故障状态
如果将绑定更改为BindingElement,并将NamedPipeTransportBindingElement、TcpTransportBindingElement等与CustomBinding一起使用,则它可以工作……但我不确定我是否理解其中的区别。