【问题标题】:WCF BindingsWCF 绑定
【发布时间】:2010-10-04 01:43:24
【问题描述】:

所以,我有一个 WCF 服务正在监听 net.tcp 和 net.pipe。我已经生成了一个 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 无法用于通信,因为它处于故障状态。”

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

【问题讨论】:

标签: wcf wcf-binding


【解决方案1】:

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

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

【讨论】:

  • 我已经让它与 *TransportBindingElements 和自定义绑定一起使用,但我很困惑它与绑定之间的区别是什么......
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 2012-04-07
  • 2011-09-01
  • 2010-10-08
  • 2013-01-14
  • 1970-01-01
相关资源
最近更新 更多