1

我在 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中没有提到服务删除。这是一个错误还是我错过了什么?

谢谢

4

1 回答 1

1

解决方案是同时处理流套接字并将 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;
    }
于 2016-06-10T22:24:04.607 回答