У меня проблемы с Windows.Devices.Enumeration и его DeviceWatcher с DN-SD с C ++ / WinRT.У меня есть 2 сетевые карты на моих машинах, и обнаружены только те сервисы на машинах, подключенных через первую карту.
Это происходит как в моей собственной тестовой программе, так и когда я расширяю пример программы DeviceEnumeration в «Универсальных примерах Windows» Microsoft, чтобы включить DNS-SD, например, добавить в DeviceSelectorChoices в Samples / DeviceEnumerationAndPairing / cpp / DisplayHelpers.h
static property DeviceSelectorInfo^ Dnssd
{
DeviceSelectorInfo^ get();
}
и в Samples / DeviceEnumerationAndPairing / cpp / DisplayHelpers.cpp вставьте
DeviceSelectorInfo^ DeviceSelectorChoices::Dnssd::get()
{
return ref new DeviceSelectorInfo("DNS-SD",
DeviceClass::All,
"System.Devices.AepService.ProtocolId:=\"{4526e8c1-8aac-4153-9b16-55e86ada0e54}\" "
"AND System.Devices.Dnssd.ServiceName:=\"_myservice._tcp\"",
DeviceInformationKind::AssociationEndpointService);
}
в Samples / DeviceEnumerationAndPairing / cpp / DisplayHelpers.cpp и обновите метод:
IVectorView<DeviceSelectorInfo^>^ DeviceSelectorChoices::DeviceWatcherSelectors::get()
{
Vector<DeviceSelectorInfo^>^ selectors = ref new Vector<DeviceSelectorInfo^>(begin(CommonDeviceSelectors), end(CommonDeviceSelectors));
selectors->Append(Dnssd);
...
Затем скомпилируйте, запустите и выберите DNS-SD из наблюдателя устройства - он находит службы только на машинах с подключением в подсети первого сетевого интерфейса, даже если он подключен во второй подсети.Но в нем не перечислены службы, работающие на компьютерах только во второй сети.
Использование инструмента командной строки dns-sd позволяет найти все объявленные службы в обеих сетях:
dns-sd -B _myservice._tcp
Я пробовал множество вариантов AQSFilter, думая, что он, возможно, не использует по умолчанию оба сетевых интерфейса - например, с использованием System.Devices.Dnssd.NetworkAdapterId - но не радует.в Windows, чем API перечисления устройства ..?