Networking DnssdServiceInstance永远不会从网络中删除

Networking DnssdServiceInstance永远不会从网络中删除,networking,uwp,dns-sd,Networking,Uwp,Dns Sd,我正在UWP项目中使用Windows.Networking.ServiceDiscovery.Dnssd API注册DnssdServiceInstance,以便使用以下代码在网络上广播: //Service Broadcast _listener = new StreamSocketListener(); _listener.ConnectionReceived += _listener_ConnectionReceived;

我正在UWP项目中使用Windows.Networking.ServiceDiscovery.Dnssd API注册DnssdServiceInstance,以便使用以下代码在网络上广播:

        //Service Broadcast
        _listener = new StreamSocketListener();
        _listener.ConnectionReceived += _listener_ConnectionReceived;

        await _listener.BindServiceNameAsync("56788");

        string userid = SettingsHelper.GetSetting("userid").ToString();

        _service = new DnssdServiceInstance(userid + "._listen._tcp.local",
           NetworkInformation.GetHostNames().FirstOrDefault(x => x.Type == HostNameType.DomainName && x.RawName.Contains("local")),
           UInt16.Parse(_listener.Information.LocalPort));

        await _service.RegisterStreamSocketListenerAsync(_listener);
该服务创建得很好,但从未从网络中删除。我一直在用我的DeviceWatcher查看所有创建的实例。即使在处理StreamSocketListener并将其设置为null时也是如此

更新:当创建服务的计算机重新启动时,所有创建的服务都将消失。。但当创建服务的应用程序关闭时,情况并非如此

API中没有提到服务删除。这是一只虫子还是我错过了什么


多谢

解决方案是处置streamsocket并将StreamSocketListener和服务实例设置为null

来自Microsoft问答游戏示例:

    /// <summary>
    /// Unregisters and removes the DNS-SD service. If this method is not called, 
    /// the registration will remain discoverable, even if the app is not running.
    /// </summary>
    public override bool StopAdvertising()
    {
        if (_socket != null && _service != null)
        {
            _socket.ConnectionReceived -= MessageToConnectReceivedFromParticipantAsync;
            _socket.Dispose();
            _socket = null;
            _service = null;

            return true;
        }

        return false;
    }
//
///注销并删除DNS-SD服务。如果未调用此方法,
///即使应用程序未运行,注册也将保持可见状态。
/// 
公共覆盖bool StopAdvertising()
{
if(_socket!=null&&u service!=null)
{
_socket.ConnectionReceived-=从ParticipantSync接收到的连接消息;
_socket.Dispose();
_socket=null;
_服务=空;
返回true;
}
返回false;
}