WCFサーバーライブラリとclient[Winform]があり、セルフホストのwinformを使用してサーバーを起動します。
クライアントがLAN上のアクティブなサーバーを検出できるようにしたいのですが、別の方法でオンラインサーバーの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";
}
}
しかし、それは私が期待したようには機能しませんでした!
更新:
WCFを使用する前にTCPソケットでサーバー検出を開発しました。試行/キャッチする並列スレッドを使用して、255のIPアドレスを接続してループしました。例:(192.168.1.X)、LAN5サーバーで試行しました[ PC]、結果はとても完璧で高速でした、私はタイムアウト(3秒)を座って
いましたが、WCFではこれをどのように達成するのかわかりません!!