2011-04-08 29 views
7

Tengo una aplicación ASP.NET que uso para leer los contenidos de una página web con un HttpWebRequest con frecuencia. No hay problema con la dirección remota y mi aplicación siempre funciona bien.Intermitente 'el nombre remoto no se pudo resolver'?

Mientras que no cambia nada, a veces (una vez al día) me sale este error:

the remote name could not be resolved. 

¿Por qué un nombre DNS que resuelva previamente falla a veces ser resueltos?

Respuesta

9

La naturaleza intermitente de esto va a ser extremadamente difícil de resolver y va a necesitar un cambio de configuración en lugar de una solución de código. (sugerencia: lea todo;)

Supongo que los servidores remotos DNS caducan con bastante frecuencia. Probablemente todos los días o incluso cada 12 horas más o menos. Este es el ajuste TTL (tiempo de vida). Los administradores algunas veces configuran esto a un nivel artificialmente bajo si necesitan la habilidad de mover rápidamente el sitio a un nuevo servidor.

Se puede determinar la frecuencia con la que caduque por ir a un símbolo del sistema y en ejecución:

nslookup 
set debug 
www.theserverdomain.com 

En la parte superior de esta será una sección que dice "los registros de autoridad:" con un artículo debajo de ella que dice "ttl".

Ahora, (y estoy adivinando aquí), lo que probablemente esté sucediendo cuando consulte a su servidor DNS para resolver ese nombre de host, su servidor tendrá este valor en la memoria caché.

Sin embargo, una vez que caduque, su servidor tendrá que ponerse en contacto con otro servidor en sentido ascendente para obtener la resolución de la dirección IP, llamada reenvío DNS. Si hay muchos saltos entre el suyo y el servidor remoto O si uno de los servidores DNS entre los sitios está sobrecargado, puede agotar el tiempo de espera y devolver el mensaje que está recibiendo.

Si esto es cierto, lo único que puede hacer es codificar la combinación de DNS y dirección IP en el archivo de hosts de su servidor web. Esto es generalmente en C:\Windows\System32\drivers\etc y es un archivo llamado "hosts". Hay un ejemplo sobre cómo editar correctamente esto dentro del archivo.

Una vez que haya creado la asignación del host en ese archivo, su servidor web ya no tendrá que ponerse en contacto con el servidor DNS para realizar la resolución del nombre y no tendrá importancia el TTL.

El único peligro aquí es si mueven el sitio web a una nueva dirección IP. En ese momento, simplemente podría actualizar su archivo de hosts de nuevo ...

+0

Gracias por el * nombre de la pregunta * y su respuesta completa. Comprobado: 'TTL' está configurado en 2 días. Ahora, ¿es posible alguna forma de tener mi pequeño caché dentro de mi aplicación? Quiero decir, resolver DNS y guardarlos en la memoria hasta la próxima descarga/carga del dominio de la aplicación. Necesito una solución con la interacción mínima de webmaster (aún la solución de host es lo suficientemente buena para mí). – Xaqron

+0

@ Xaqron: como toda la resolución ocurre en el nivel del sistema operativo, la única forma real de hacerlo es a través del archivo host; a menos que el servidor en cuestión pueda responder cuando se accede solo a través de la dirección IP. – NotMe

1

Lo primero que verificaría es si el DNS ya no está configurado correctamente o no funciona correctamente.

Try (desde una línea de comandos de Windows)

nslookup MyDnsNameHere 

y ver si le da la IP que se puede esperar.

Cuestiones relacionadas