我需要将相同wcf应用程序的2个实例相互连接(用于测试场景)。
每个客户端都公开一个服务端点,并且还能够连接到同一个服务 被他的同伴曝光。
在每个客户端上公开的终点:
<services>
<service name="BackGammonClient.ClientService">
<endpoint address="net.tcp://localhost:8081/ClientService" binding="netTcpBinding"
bindingConfiguration="" contract="Contracts.Client.IClient" />
</service>
</services>
问题是每个客户端都暴露了完全相同的端点,因为它们都在同一个localhost上运行并且被赋予相同的端口。
如何为客户端应用程序的每个实例动态应用端口?
我在考虑如何检查是否已经采用了默认端点 并应用一些正在运行的端口号以附加到该地址。
答案 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( );