У меня есть серверная библиотека WCF и клиент [Winform], я запускаю сервер, используя winform с собственным хостом.
Я хочу, чтобы клиент мог обнаружить активные серверы в локальной сети, другим способом получить IP-адреса онлайн-серверов в списке. я попробовал DiscoveryClient
и UdpDiscoveryEndpoint
, и это сработало, вот код:
Клиент[Winform]:
private void button1_Click(object sender, EventArgs e)
{
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
FindResponse findResponse = discoveryClient.Find(new FindCriteria(typeof(IFileManager)));
foreach (EndpointDiscoveryMetadata ep in findResponse.Endpoints)
{
listView1.Items.Add(ep.Address.ToString());
}
}
Сервер[Winform]:
ServiceHost host = new ServiceHost(typeof(MainService));
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "Start")
{
host.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
host.AddServiceEndpoint(new UdpDiscoveryEndpoint());
host.Open();
button1.Text = "Stop";
}
else
{
host.Close();
button1.Text = "Start";
}
}
but it didn't work like i expect it!
ОБНОВЛЕНИЕ:
Я разработал обнаружение сервера в сокетах TCP до того, как использовал WCF, я использовал параллельную поточность, которая пытается/поймать, чтобы подключиться и зациклиться на 255 IP-адресах, например: (192.168.1.X ), я попробовал это на серверах LAN 5 [ПК], результат был таким идеальным и быстрым, я выдержал тайм-аут (3 секунды)
но на WCF я не знаю, как бы я это сделал !!