Проблема с 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

Другие вопросы по тегам