2010-07-16 31 views
5

Sử dụng .Net Reflector on System.Runtime.Remoting.Channels.CoreChannel Tôi giải thích 2 phương thức dưới đây. GetMachineIp() được gọi khi thiết lập một HttpChannel để truy cập từ xa.System.Runtime.Remoting.Channels.CoreChannel.GetMachineIP() từ .NET Reflector - vui lòng giải thích

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; 

}

Câu hỏi của tôi là lý do tại sao sẽ Dns.GetHostEntry() trong GetMachineIP() thất bại với SocketException "Không chủ như vậy được biết đến". GetMachineName() trả về thành công (cũng có một GetHostEntry). Điều này chỉ xảy ra trên một máy bị cô lập. Nó có thể là một cái gì đó để làm với đăng ký DNS không chính xác?

Trả lời

1

Kiểm tra các bình luận trong tài liệu MSDN này:

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

Nó nói rằng bạn cần một máy chủ chuyển tiếp/Một entry trong DNS cho máy. Một mục khác nói rằng điều này đã thay đổi trong phiên bản 4.0. Vì vậy, có lẽ bạn có thể thử .NET Framework 4.0 và xem nó có giải quyết được vấn đề của bạn hay không. Nếu không kiểm tra đăng ký DNS của bạn cho máy.

Hy vọng điều đó sẽ hữu ích!

1

Tôi có thể gặp phải vấn đề tương tự: Thiết lập .NET Remoting HttpChannel không thành công với ngoại lệ "Không có máy chủ lưu trữ được biết đến" trên máy bị cô lập.

Tên của máy tính hóa ra là nguyên nhân. GetMachineName trả về "12", sau đó được giải thích là địa chỉ IP của Dns.GetHostEntry. Thay đổi tên máy tính đã giải quyết được sự cố.

Bạn sẽ có lỗi đối với tên máy tính mà có thể được hiểu là địa chỉ IP bằng IPAddress.Parse

0

này khắc phục sự cố cho tôi:

Thêm một bản đồ cho tên máy tính để 127.0.0.1 trong tệp máy chủ (đường dẫn: "c: \ windows \ system32 \ drivers \ etc \ hosts")

127.0.0.1 <computer name> 
Các vấn đề liên quan