2010-04-26 7 views
7

Sono stato con il seguente codice per mesi (senza problemi) in un ambiente .NET 2.0/3.5:problema con System.Net.Dns.GetHostEntry (dnsserver) su .NET 4.0

string server="192.168.1.3"; 
IPHostEntry ipe = System.Net.Dns.GetHostEntry(server); 
IPAddress ipa = ipe.AddressList[0]; 
IPEndPoint ipep = new IPEndPoint(ipa, (int)UdpServices.Domain); 

Qui, il server è hardcoded a un indirizzo IP, ma nella mia applicazione potrebbe essere qualcosa come "server.test.com".

Durante la conversione del progetto in .NET 4.0, questo codice ha smesso di funzionare quando si passa direttamente un indirizzo IP (funziona ancora con un nome host). Si blocca con questa eccezione:

System.Net.Sockets.SocketException was unhandled 
    Message=The requested name is valid, but no data of the requested type was found 
    Source=System 
    ErrorCode=11004 
    NativeErrorCode=11004 
    StackTrace: 
     at System.Net.Dns.InternalGetHostByAddress(IPAddress address, Boolean includeIPv6) 
     at System.Net.Dns.GetHostEntry(String hostNameOrAddress) 

Perché tutto quello che serve è la risultante IPEndPoint, posso aggirare il problema utilizzando IPAddress.Parse per generare l'oggetto IPAddress, ma voglio sapere se qualcuno di voi sa perché questo comportamento è cambiato in .NET 4.0? (Se non siamo in grado di risolvere il nome host dall'indirizzo IP, viene lanciata un'eccezione).

risposta

5

Microsoft ha risposto questo here:

questo è stato appositamente modificato a più costantemente rappresentare la risoluzione dei nomi fallimenti. Se si dispone di stringhe di input che si desidera solo convertire in IPAddresses, si consiglia di si utilizza IPAddress.TryParse o Dns.GetHostAddresses

+0

il link è rotto –

+0

Questo collegamento funziona: [https://connect.microsoft.com/VisualStudio/feedback/details/561083/dns-gethostentry-behaves-differently-in-net-4-0-than-previous-versions](https://connect.microsoft.com/VisualStudio/ feedback/dettagli/561083/dns-gethostentry-si comporta-differentemente-in-net-4-0-rispetto-versioni precedenti) – empty

+0

Questo link non funziona neanche ora. – bgmCoder