Проблема с System.Net.Dns.GetHostEntry(dnsServer) в.NET 4.0
Я использую следующий код в течение нескольких месяцев (без проблем) в среде.NET 2.0/3.5:
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);
Здесь сервер жестко запрограммирован на IP-адрес, но в моем приложении это может быть что-то вроде "server.test.com".
При преобразовании моего проекта в.NET 4.0 этот код перестал работать при прямой передаче IP-адреса (по-прежнему работает с именем хоста). Вылетает с этим исключением:
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)
Поскольку все, что мне нужно, - это получившаяся IPEndPoint, я могу обойти эту проблему, используя IPAddress.Parse для создания объекта IPAddress, но я хочу знать, знает ли кто-нибудь из вас, почему это поведение изменилось в.NET 4.0? (Если мы не можем разрешить имя хоста с IP-адреса, теперь генерируется исключение).
1 ответ
Microsoft ответила здесь:
это было намеренно изменено, чтобы более последовательно представлять ошибки разрешения имен. Если у вас есть входные строки, которые вы просто хотите преобразовать в IP-адреса, рекомендуется использовать IPAddress.TryParse или Dns.GetHostAddresses