C# 用“ServiceDiscovery.Dnssd”做广告,用“你好”做发现?

C# 用“ServiceDiscovery.Dnssd”做广告,用“你好”做发现?,c#,uwp,windows-10,bonjour,dns-sd,C#,Uwp,Windows 10,Bonjour,Dns Sd,谷歌是否允许通过苹果公司的“你好”来发现一项服务 微软的文档提到了所有正确的DNS-SD RFC,但我无法发现我的程序使用这个。我知道Bonjour Browser程序正在工作,因为它可以发现我网络上的其他设备以及通过mDNSResponder发布的本地服务。微软关于这个名称空间的文档非常模糊,让我感到疑惑 在这段代码中是否有明显的错误 async Task RegisterServiceAsync() { var hostNames = NetworkInformation

谷歌是否允许通过苹果公司的“你好”来发现一项服务

微软的文档提到了所有正确的DNS-SD RFC,但我无法发现我的程序使用这个。我知道Bonjour Browser程序正在工作,因为它可以发现我网络上的其他设备以及通过mDNSResponder发布的本地服务。微软关于这个名称空间的文档非常模糊,让我感到疑惑

在这段代码中是否有明显的错误

async Task RegisterServiceAsync()
{
    var hostNames = NetworkInformation
        .GetHostNames()
        .Where(x => x.Type == HostNameType.DomainName)
        .Select(x => new KeyValuePair<string, HostName>(x.ToString(), x))
        .ToList();
    var hostName = Pick("Pick a host name:", hostNames);
    Console.WriteLine($"Host name is \"{hostName}\"");

    var service = new DnssdServiceInstance(
        dnssdServiceInstanceName: "abc._tcp.local.",
        hostName: hostName,
        port: 13337
    );
    using (var socket = new StreamSocketListener())
    {
        var registration = await service.RegisterStreamSocketListenerAsync(socket);
        Console.WriteLine(registration.Status);
        Console.WriteLine($"Renamed: {registration.HasInstanceNameChanged}");
        Console.WriteLine($"Service instance name: {service.DnssdServiceInstanceName}");
        Console.ReadKey(true);
    }
}
示例输出:

1) hostname.domain.local 2) hostname.local Pick a host name: (1-2) 2 Host name is "hostname.local" Success Renamed: False Service instance name: abc._tcp.local. dnssdServiceInstanceName的格式错误。这是必须的。。。例如,此代码可以工作:

async Task RegisterServiceAsync()
{
    var hostNames = NetworkInformation
        .GetHostNames()
        .Where(x => x.Type == HostNameType.DomainName)
        .Select(x => new KeyValuePair<string, HostName>(x.ToString(), x))
        .ToList();
    var hostName = Pick("Pick a host name:", hostNames);
    Console.WriteLine($"Host name is \"{hostName}\"");

    var service = new DnssdServiceInstance(
        dnssdServiceInstanceName: "instanceName._abcservice._tcp.local.",
        hostName: hostName,
        port: 13337
    );
    using (var socket = new StreamSocketListener())
    {
        var registration = await service.RegisterStreamSocketListenerAsync(socket);
        Console.WriteLine(registration.Status);
        Console.WriteLine($"Renamed: {registration.HasInstanceNameChanged}");
        Console.WriteLine($"Service instance name: {service.DnssdServiceInstanceName}");
        Console.ReadKey(true);
    }
}
我用微软的一个示例程序解决了这个问题