Windows.Devices.Enumeration DeviceWatcher не находит все службы с несколькими сетевыми картами - PullRequest
0 голосов
/ 17 декабря 2018

У меня проблемы с 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 перечисления устройства ..?

...