WCF绑定

时间:2009-01-28 18:00:34

标签: wcf wcf-binding

所以,我有一个正在监听net.tcp和net.pipe的WCF服务。我已经生成了一个WCF代理客户端,我希望它能够通过tcp或命名管道连接。我不想在app.config中使用配置,而是在代码中。

WCF客户端将在运行时获取端点地址,例如“net.tcp:// mymachine:10001 / MyService”或“net.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不能用于通信,因为它处于Faulted状态。”

如果将Binding更改为BindingElement,并使用CustomBinding使用NamedPipeTransportBindingElement,TcpTransportBindingElement等,则可以正常工作......但我不确定我是否理解其中的区别。

1 个答案:

答案 0 :(得分:3)

不,你不能。绑定中只能有一个传输元素,只有一个传输元素没有意义。

您必须查看该方案,然后根据该方案选择正确的绑定。这很简单,使用Uri类,它将为你执行解析。

相关问题