Прерывистое ‘не удалось разрешить удаленное имя’?

#asp.net #httpwebrequest #dns

#asp.net #httpwebrequest #dns

Вопрос:

У меня ASP.NET приложение, которое я использую для HttpWebRequest частого чтения содержимого веб-страницы. С удаленным адресом проблем нет, и мое приложение всегда работает нормально.

Хотя я ничего не меняю, иногда (примерно раз в день) Я получаю эту ошибку:

 the remote name could not be resolved.
  

Почему ранее разрешенное DNS-имя иногда не может быть разрешено?

Ответ №1:

Прерывистый характер этой проблемы будет чрезвычайно сложно устранить, и для этого потребуется изменение конфигурации, а не кодовое решение. (подсказка: прочитайте все 😉

Я бы предположил, что DNS удаленных серверов настроен на истечение срока действия довольно часто. Вероятно, ежедневно или, может быть, даже каждые 12 часов или около того. Это параметр TTL (время ожидания). Администраторы иногда устанавливают искусственно низкий уровень, если им нужна возможность быстрого переноса сайта на новый сервер.

Вы можете определить, как часто истекает срок его действия, перейдя в командную строку и выполнив:

 nslookup
set debug
www.theserverdomain.com
  

В верхней части этого будет раздел с надписью «ЗАПИСИ ПОЛНОМОЧИЙ», а под ним элемент с надписью «ttl».

Теперь (и здесь я делаю обоснованное предположение), что, вероятно, происходит, когда вы запрашиваете свой DNS-сервер для разрешения этого имени хоста, на вашем сервере это значение будет кэшировано.

Однако по истечении срока действия вашему серверу придется связаться с другим вышестоящим сервером, чтобы получить разрешение IP-адреса, называемое переадресацией DNS. Если между вашим сервером и удаленным сервером много переходов или если один из DNS-серверов между сайтами перегружен, то может произойти тайм-аут и повторная отправка получаемого вами сообщения.

Если это верно, то единственное, что вы можете сделать, это жестко закодировать комбинацию DNS и IP-адресов в файле hosts вашего веб-сервера. Обычно это находится по адресу C:WindowsSystem32driversetc и представляет собой файл с именем «hosts». Есть пример того, как правильно отредактировать это в самом файле.

Как только вы создадите сопоставление хоста в этом файле, вашему веб-серверу больше не нужно будет связываться с DNS-сервером для выполнения разрешения имени, и не будет иметь значения, какой TTL установлен.

Единственная опасность здесь заключается в том, что они перемещают веб-сайт на новый IP-адрес. В этот момент вы могли бы просто снова обновить файл hosts…

Комментарии:

1. Спасибо за название вопроса и ваш полный ответ. Проверено: TTL установлено на 2 дня. Теперь, возможно ли каким-то образом сохранить мой маленький кэш внутри моего приложения? Я имею в виду разрешение DNS и сохранение их в памяти до следующей выгрузки / загрузки домена приложения. Мне нужно решение с минимальным взаимодействием с веб-мастером (тем не менее, решение для хостинга для меня достаточно хорошее).

2. @Xaqron: Поскольку все разрешения происходят на уровне операционной системы, единственный реальный способ сделать это — через файл host; если только соответствующий сервер не может отвечать при доступе только через IP-адрес.

Ответ №2:

Первое, что я бы проверил, это то, что DNS больше не настроен правильно или работает со сбоями.

Попробуйте (из командной строки Windows)

 nslookup MyDnsNameHere
  

и посмотрите, получите ли вы IP, который вы ожидаете.