c# system.net.dns universal app (W10) not working

2019-07-11 21:59发布

问题:

I tried to get IP adress from DNS by using IPAddress[] ip = Dns.GetHostAddresses("www.google.com"); in univesal c# windows app.

But it shows me error Error CS0103 The name 'Dns' does not exist in the current context

I tried it in console app, it works perfectly. Namespace System.Net doesnt contain Dns in win 10 universal app. Could you tell me, where is problem or another solution?

My CODE

using System.Net;
public MainPage()
{
    this.InitializeComponent();
}

private void button_Click(object sender, RoutedEventArgs e)
{
    string zaznam = In.Text;
    IPAddress[] ip = Dns.GetHostAddresses("www.google.com");
}

回答1:

The error is correct. System.Net.Dns is not available in the .Net Framework for Windows Runtime.

You can use the Windows Runtime classes instead: Call Windows.Networking.Sockets.DatagramSocket.GetEndpointPairsAsync then examine the returned EndpointPairs

async Task ListEndpoints()
{
    HostName host = new HostName("www.stackoverflow.com");
    var eps = await DatagramSocket.GetEndpointPairsAsync(host, "80");
    foreach(EndpointPair ep in eps)
    {
        Debug.WriteLine("EP {0} {1}",new object[] { ep.LocalHostName, ep.RemoteHostName });
    }
}


回答2:

what happens when you do the following instead ConsoleApp

IPHostEntry ipHostEntry = Dns.GetHostEntry("www.google.com");

or if there are more Ip addresses you can do the following

IPAddress[] ips;
ips = Dns.GetHostAddresses("www.google.com");
Console.WriteLine("GetHostAddresses({0}) returns:", "google.com");//if you are passing in a hostname inside a method change this to hostname variable
foreach (IPAddress ip in ips)
{
    Console.WriteLine("    {0}", ip);
}

Universal APP try the following below Microsoft.Phone.Net.NetworkInformation namespace

public void DnsLookup(string hostname)
{
    var endpoint = new DnsEndPoint(hostname, 0);
    DeviceNetworkInformation.ResolveHostNameAsync(endpoint, OnNameResolved, null);  
}

private void OnNameResolved(NameResolutionResult result)
{
    IPEndPoint[] endpoints = result.IPEndPoints;
    // Do something with your endpoints
}