Я пытаюсь использовать DeviceInformation.CreateWatcher в приложении UWP для перечисления сервисов mDNS:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (_dnsWatcher == null)
{
_dnsWatcher = DeviceInformation.CreateWatcher("(System.Devices.Aep.ProtocolId:=\"{4526e8c1-8aac-4153-9b16-55e86ada0e54}\")");
_dnsWatcher.Added += DnsWatcher_Added;
_dnsWatcher.EnumerationCompleted += DnsWatcher_EnumerationCompleted;
_dnsWatcher.Removed += DnsWatcher_Removed;
_dnsWatcher.Stopped += DnsWatcher_Stopped;
_dnsWatcher.Updated += DnsWatcher_Updated;
_dnsWatcher.Start();
}
}
Wireshark не показывает трансляцию mDNS, и происходит только обратный вызов EnumerationCompleted.
Я что-то упускаю?
Даже если службы mDNS отсутствуют, он все равно должен отправлять запрос mDNS.
Не беспокойтесь о том, что событие EnumerationCompleted запущено. Если устройство добавляется в систему после завершения начального перечисления устройств, оно будет повторно перечислено. Только если вы вызовете метод Stop(), он остановит операцию перечисления.





Вам нужно добавить то, что вы смотрите. Вот мой рабочий код:
var proto = "_gopher._tcp"; // e.g. _http._tcp
var queryString = $"System.Devices.AepService.ProtocolId: = {{{DnsSdProtocol}}} AND System.Devices.Dnssd.ServiceName:=\"{proto}\" AND System.Devices.Dnssd.Domain:=\"local\"";
var askFor = new String[] { "System.Devices.Dnssd.HostName",
"System.Devices.Dnssd.ServiceName",
"System.Devices.Dnssd.InstanceName",
"System.Devices.IpAddress",
"System.Devices.Dnssd.PortNumber",
"System.Devices.Dnssd.TextAttributes",
};
dw = DeviceInformation.CreateWatcher(queryString, askFor, DeviceInformationKind.AssociationEndpointService);
Обратите внимание, что моя строка запроса включает протокол для поиска (_gopher._tcp) и домен DNS. Предостережение: я новичок в DNS-SD и не знаю, какие настройки домена DNS действительны.
Убедитесь, что если есть службы mDNS.