【问题标题】:how to wcf service could discovery other running service如何 wcf 服务可以发现其他正在运行的服务
【发布时间】:2012-05-08 00:07:55
【问题描述】:

我想创建这样的服务。 当一个服务启动时,它可以在同一台机器上找到其他正在运行的服务,比如 p2p。 我想使用 WCF 的 NetNamedPipeBinding。

以及,如何实现?

更新' 我试试这个。

启动服务'

    private void ActionInitService()
    {
        try
        {
            _host = new ServiceHost(this, new Uri(ADDRESS_PIPE_BASE));

            var binding = new NetNamedPipeBinding();
            _host.AddServiceEndpoint((typeof (IClientService)), binding, Address.ToString());
            // ** DISCOVERY ** //
            _host.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
            _host.AddServiceEndpoint(new DiscoveryEndpoint(binding, new EndpointAddress(ADDRESS_PIPE_BASE)));
        }
        catch (Exception ex)
        {
            Debug.WriteLine("exp: " + ex);
        }
    }

寻找服务'

public ObservableCollection<string> FindRunningClient()
    {
        var endpoints = new ObservableCollection<string>();
        try
        {
            var binding = new NetNamedPipeBinding();
            var address = new EndpointAddress(ADDRESS_PIPE_BASE);
            var discoveryClient = new DiscoveryClient(new DiscoveryEndpoint(binding, address));

            FindResponse rk2Clients = discoveryClient.Find(new FindCriteria(typeof(IClientService)));

            discoveryClient.Close();

            if (rk2Clients.Endpoints.Count != 0)
            {
                foreach (EndpointDiscoveryMetadata endpoint in rk2Clients.Endpoints)
                {
                    endpoints.Add(endpoint.Address.ToString());
                }
            }

            return endpoints;
        }
        catch (Exception e)
        {
            return endpoints;
        }
    }

但问题是,它只能找到第一个启动的服务。 我该怎么办?

【问题讨论】:

    标签: .net wcf c#-4.0 named-pipes


    【解决方案1】:

    【讨论】:

    • 是的,谢谢你的帮助,我知道了。但我不想使用 udp。或者换句话说,我不明白如何使用它。希望能得到一些关键点的提示。
    • 看看这个'link
    • 为什么不想使用UDP?可能有正当的理由,但在不知道你的动机的情况下,这似乎是在重新发明轮子?
    • 哦,是的。我只是想知道它是如何工作的。 ok,比如udpdiscovery的默认超时时间是20s。而且,我将其更改为 0.5 秒。我怎么知道所有客户端是否都在同一台电脑上。以及如何检查服务是否正在运行?
    猜你喜欢
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 2013-07-03
    相关资源
    最近更新 更多