2010-07-16 23 views
5

Usando .Net Reflector en System.Runtime.Remoting.Channels.CoreChannel Descompilé los 2 métodos siguientes. Se llama a GetMachineIp() al configurar un HttpChannel para la comunicación remota.System.Runtime.Remoting.Channels.CoreChannel.GetMachineIP() de .NET Reflector - explique

internal static string GetMachineIp() 
{ 
    if (s_MachineIp == null) 
    { 
     IPHostEntry hostEntry = Dns.GetHostEntry(GetMachineName()); 
     AddressFamily addressFamily = Socket.SupportsIPv4 ? 
      AddressFamily.InterNetwork : AddressFamily.InterNetworkV6; 
     IPAddress machineAddress = GetMachineAddress(hostEntry, addressFamily); 
     if (machineAddress != null) 
     { 
      s_MachineIp = machineAddress.ToString(); 
     } 
     if (s_MachineIp == null) 
     { 
      throw new ArgumentNullException("ip"); 
     } 
} 
return s_MachineIp; 

}

internal static string GetMachineName() 
{ 
    if (s_MachineName == null) 
    { 
     string hostName = GetHostName(); 
     if (hostName != null) 
     { 
      IPHostEntry hostEntry = Dns.GetHostEntry(hostName); 
      if (hostEntry != null) 
      { 
       s_MachineName = hostEntry.HostName; 
      } 
     } 
     if (s_MachineName == null) 
     { 
      throw new ArgumentNullException("machine"); 
     } 
    } 
    return s_MachineName; 

}

Mi pregunta es ¿por qué Dns.GetHostEntry() en GetMachineIP() fallará con SocketException "No existe el anfitrión se conoce". GetMachineName() regresa con éxito (que también hace GetHostEntry). Esto solo ocurre en una máquina aislada. ¿Podría ser algo relacionado con el registro DNS incorrecto?

Respuesta

1

ver los comentarios en esta documentación de MSDN:

http://msdn.microsoft.com/en-us/library/ms143998.aspx

Se dice que necesita una gran cantidad de avance/Una entrada en el DNS para la máquina. Otra entrada dice que esto ha cambiado en la versión 4.0. Entonces quizás puedas probar .NET Framework 4.0 y ver si resuelve tu problema. Si no, verifique su registro de DNS para la máquina.

Espero que ayude!

1

Probablemente me encontré con el mismo problema: Configuración de .NET Remoting HttpChannel falló con la excepción "No se conoce ese host" en una máquina aislada.

El nombre de la máquina resultó ser la causa. GetMachineName devolvió "12", que luego fue interpretado como una dirección IP por Dns.GetHostEntry. Cambiar el nombre de la computadora resolvió el problema.

Vas a tener el error de nombres de equipo que se puede interpretar como direcciones IP por IPAddress.Parse

0

Esto ha solucionado el problema para mí:

agregar una asignación para el nombre del equipo a 127.0.0.1 en el archivo de hosts (ruta de acceso: "c: \ windows \ system32 \ drivers \ etc \ hosts")

127.0.0.1 <computer name> 
Cuestiones relacionadas