WCF以编程方式合并服务端点地址

时间:2012-02-25 13:31:48

标签: c# wcf endpoint

我需要将相同wcf应用程序的2个实例相互连接(用于测试场景)。

每个客户端都公开一个服务端点,并且还能够连接到同一个服务 被他的同伴曝光。

在每个客户端上公开的终点:

 <services>
    <service name="BackGammonClient.ClientService">
        <endpoint address="net.tcp://localhost:8081/ClientService" binding="netTcpBinding"
                bindingConfiguration="" contract="Contracts.Client.IClient" />
    </service>
  </services>     

问题是每个客户端都暴露了完全相同的端点,因为它们都在同一个localhost上运行并且被赋予相同的端口。

如何为客户端应用程序的每个实例动态应用端口?

我在考虑如何检查是否已经采用了默认端点 并应用一些正在运行的端口号以附加到该地址。

1 个答案:

答案 0 :(得分:2)

您可以以编程方式配置端点。参见:

http://msdn.microsoft.com/en-us/library/ff647110.aspx

此堆栈帖子涵盖检测端口是否空闲:

In C#, how to check if a TCP port is available?

这是另一个带有一些程序化端点配置的链接:

http://en.csharp-online.net/WCF_Essentials%E2%80%94Programmatic_Endpoint_Configuration

所以,比如:

string svcUri = String.Format("net.tcp://localhost:{0}", port);
ServiceHost host = new ServiceHost(typeof(MyService));
Binding tcpBinding = new NetTcpBinding( );
host.AddServiceEndpoint(typeof(IMyOtherContract),tcpBinding,
svcUri);
host.Open( );