如何探测可用的TCP端口以便以编程方式配置WCF服务EndPoint?
发布于 2009-01-30 14:02:13
如果您动态选择服务器端口,您的客户端如何知道端点?
不管怎样,
这是一种探测开放端口的肮脏方法
for (int port = 2000; port < 65535; port++)
{
IPEndPoint ep = new IPEndPoint(IPAddress.Any, port);
Socket socket = new Socket(AddressFamily.InterNetwork, st, pt);
try {
socket.Bind(ep);
socket.Close();
//Port available
}
catch (SocketException)
{
Debug.WriteLine("Port not available {0}", port);
}
}然后,尝试创建自定义服务主机。
http://msdn.microsoft.com/en-us/library/aa395224.aspx
发布于 2011-05-24 17:42:33
这不是一种特别优雅的方式,但您可以尝试打开主机并捕获AddressAlreadyInUseException异常。这就消除了Socket的使用和amazedsaint方法中存在的竞争条件:在检查和您尝试打开服务之间不能占用端口。
所以,基本上:
ServiceHost host;
for(int port = 2000; port < 65535; port++) {
var address = GetBaseAddress(port);
host = new ServiceHost(typeof(MyService), address);
try {
host.Open();
break;
}
catch(AddressAlreadyInUseException) {
}
}GetBaseAddress方法只是使用String.Format创建一个地址,以便将端口号放在地址模式中的正确位置。
我想现在更相关了,因为我们在.NET 4中有了WCF Discovery。
发布于 2011-05-24 17:54:47
你要找的是:Socket.Select
https://stackoverflow.com/questions/495552
复制相似问题