2012-09-25 12 views
5

Necesito almacenar el nombre de host de la computadora solicitante en la base de datos si se crea un nuevo conjunto de datos. Para indicar claramente esto al usuario (es todo interno de la empresa), lo mostramos como tres cuadros de texto en la forma que rellena el usuario. Estos tres cuadros de texto están llenos de esa manera:ASP.NET Request.UserHostName que no contiene el nombre de host

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      txtHostname.Text = Request.UserHostName.ToString(); 
      txtIPAdress.Text = Request.UserHostAddress.ToString(); 
      txtWindowsLogin.Text = Request.LogonUserIdentity.Name.ToString(); 
     } 
    } 

Sin embargo, no importa de qué cliente probé, la búsqueda inversa de la IP que debe dar el nombre de host en Request.UserHostname no funciona, por lo que el campo está lleno de la dirección IP. Si uso nslookup en el servidor, la inversión funciona bien. ¿Algún consejo para mí sobre dónde podría comenzar? Muchas gracias.

Respuesta

3

Necesita configure IIS para que funcione. Alternativamente, puede usar Dns.GetHostEntry para realizar la búsqueda inversa si solo lo necesita en un solo lugar.

La búsqueda inversa en cada solicitud puede tener un gran impacto en el rendimiento, por lo que no está habilitada de manera predeterminada. Yo recomendaría la ruta Dns.GetHostEntry si es posible. .

Aquí es un método de búsqueda inversa útiles usamos:

public static string ReverseLookup(string ip) 
{ 
    if (string.IsNullOrEmpty(ip)) return ip; 

    try 
    { 
     return Dns.GetHostEntry(ip).Select(entry => entry.HostName).FirstOrDefault() ?? ip; 
    } 
    catch(SocketException) { return ip; } 
} 
+0

Hola @HackedByChinese, muchas gracias por el enlace, simplemente fue exactamente lo correcto. Para las pruebas habilité la búsqueda inversa por IIS, pero también modificaré la aplicación para usar Dns.GetHostEntry. Tu código se ve muy bien, solo agregaré un 'throw ArgumentException' si ip es nulo o está vacío. Gracias de nuevo :-) –

0

Page.Request.ServerVariables [ "HTTP_HOST"] ToUpper();

Puede usar esto para obtener el nombre de host en una aplicación con equilibrio de carga.

Cuestiones relacionadas