代码之家  ›  专栏  ›  技术社区  ›  Mark Brackett Achilles Ram Nakirekanti

WCF绑定

  •  1
  • Mark Brackett Achilles Ram Nakirekanti  · 技术社区  · 15 年前

    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一起使用,则它可以工作……但我不确定我是否理解其中的区别。

    1 回复  |  直到 15 年前
        1
  •  3
  •   casperOne    15 年前

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

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