如何以编程方式编写端点(netPeer Tcp 绑定)

Posted

技术标签:

【中文标题】如何以编程方式编写端点(netPeer Tcp 绑定)【英文标题】:How can I write end point programmatically (netPeerTcpBinding) 【发布时间】:2016-05-25 23:12:59 【问题描述】:

我需要在 c# 中以编程方式编写此结束代码,这是用于聊天应用程序的。

app.config 部分

 <system.serviceModel>
        <client>
          <endpoint name="ChatEndPoint" address="net.p2p://chatMesh/ChatServer" binding="netPeerTcpBinding" bindingConfiguration="PeerTcpConfig" contract="Test.IChatService"></endpoint>
        </client>
        <bindings>
          <netPeerTcpBinding>
            <binding name="PeerTcpConfig" port="0">
              <security mode="None"></security>
              <resolver mode="Custom">
                <custom address="net.tcp://192.168.0.147:22222/ChatServer" binding="netTcpBinding" bindingConfiguration="TcpConfig"></custom>
              </resolver>
            </binding>
            <!--<binding name="BindingDefault" port="0">
              <security mode="None"></security>
              <resolver mode="Auto"></resolver>
            </binding>-->
          </netPeerTcpBinding>
          <netTcpBinding>
            <binding name="TcpConfig">
              <security mode="None"></security>
            </binding>
          </netTcpBinding>
        </bindings>
      </system.serviceModel>

C#部分

 InstanceContext context = new InstanceContext(
                        new Home(txtUserName.Text.Trim()));
                    factory =
                        new DuplexChannelFactory<IChatChannel>(context, "ChatEndPoint");
                    channel = factory.CreateChannel();

这对我来说很好用。但是,我需要动态更改端点地址。寻求宝贵的支持。

【问题讨论】:

现在你知道真相了吗? 【参考方案1】:

使用端点选择逻辑编写您自己的 ChanelFactory

https://msdn.microsoft.com/en-us/library/ms734681.aspx.

或者只是使用 DuplexChanelFactory 的另一个构造函数,该构造函数采用 EndPointAddress 对象,您可以在代码中使用所有必要参数创建该对象

https://msdn.microsoft.com/ru-ru/library/ms576164(v=vs.110).aspx

【讨论】:

我试过了,但在这里我需要使用 DuplexChannelFactory 。当我配置它时,它有一些参数,如 ServiceEndpoint 或绑定和远程地址 能检查一下上面的配置吗,有什么解决办法 @user2972244 DuplexChannelFactory 有很多构造函数:msdn.microsoft.com/ru-ru/library/ms576164(v=vs.110).aspx。您使用一个在配置文件中采用端点名称的方法。而不是这样做,您必须使用所需的 ip 手动创建 EndPointAddress 对象并将其路径到另一个构造函数。然后你可以编写任何你想找出 ip 或其他 endPointAddress 设置的逻辑 这里我有一个 p2p 端点,我可以写。但实际工作是基于 tcp bing。我怎样才能包含那个绑定 @user2972244 您可以从配置文件中加载它,或者以编程方式进行。在我的项目中,我们对行为和绑定进行了硬编码,因为 98% 的时间没有人在配置中更改它。只是安装困难

以上是关于如何以编程方式编写端点(netPeer Tcp 绑定)的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式更改端点的身份配置?

如何以编程方式为 WCF 服务创建自签名证书?

如何以编程方式修改 WCF app.config 端点地址设置?

net.tcp 绑定上的线程不足 - TCP 错误代码 10061

如何以可编程方式等待进程启动端点

如何在 VC++ 中禁用 Windows TCP/IP 堆栈 [以编程方式]