2016-06-09 7 views
1

ich in einem UWP Projekt der Windows.Networking.ServiceDiscovery.Dnssd API bin mit einem DnssdServiceInstance zu registrieren, das Netzwerk zu übertragen um mit dem folgenden Code:DnssdServiceInstance wird nie aus dem Netzwerk entfernt

 //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); 

Der Dienst erstellt wird gut, aber wird nie aus dem Netzwerk entfernt. Ich sehe alle erstellten Instanzen mit meinem DeviceWatcher. Auch wenn Sie den StreamSocketListener auf null setzen und einstellen.

Update: Wenn der Computer, der den Dienst erstellt neu gestartet wird, werden alle erstellten Services sind weg .. aber nicht, wenn die Anwendung, die den Dienst erstellt hat

heruntergefahren

Es gibt keine Erwähnung in der API von Service Entfernung . Ist das ein Fehler oder habe ich etwas übersehen?

Dank

Antwort

1

Die Lösung ist sowohl die streamsocket verfügen und die StreamSocketListener und die Dienstinstanz auf null gesetzt.

Aus dem Microsoft-Quiz-Beispiel:

/// <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; 
    }