2012-09-25 36 views
5

Tôi cần lưu trữ tên máy chủ của máy tính yêu cầu trong cơ sở dữ liệu nếu tập dữ liệu mới được tạo. Để chỉ rõ điều này cho người dùng (đó là tất cả nội bộ của công ty), chúng tôi hiển thị điều này dưới dạng ba hộp văn bản trong biểu mẫu mà người dùng điền vào. Ba textbox được điền như thế:ASP.NET Request.UserHostName không chứa tên máy chủ

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(); 
     } 
    } 

Tuy nhiên không có vấn đề từ những gì khách hàng tôi kiểm tra, tra cứu đảo ngược của IP mà nên cung cấp tên máy trong Request.UserHostname không hoạt động, vì vậy lĩnh vực này được làm đầy với địa chỉ IP. Nếu tôi sử dụng nslookup trên máy chủ, việc đảo ngược hoạt động tốt. Bất kỳ gợi ý nào cho tôi nơi tôi có thể bắt đầu? Cảm ơn rất nhiều.

Trả lời

3

Bạn cần phải configure IIS để làm việc này. Cách khác, bạn có thể sử dụng Dns.GetHostEntry để thực hiện tra cứu ngược nếu bạn chỉ cần ở một vị trí.

Tra cứu ngược trên mọi yêu cầu có thể có tác động nghiêm trọng đến hiệu suất, đó là lý do tại sao nó không được bật theo mặc định. Tôi muốn giới thiệu tuyến đường Dns.GetHostEntry nếu bạn có thể. .

Dưới đây là một phương pháp tra cứu ngược lại hữu ích, chúng tôi sử dụng:

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

Xin chào @HackedByChinese, cảm ơn bạn rất nhiều vì đã liên kết, nó chính xác là điều đúng đắn. Để thử nghiệm, tôi đã kích hoạt tra cứu ngược lại bằng IIS, nhưng tôi cũng sẽ sửa đổi ứng dụng để sử dụng Dns.GetHostEntry. Mã của bạn trông rất tốt, tôi sẽ chỉ thêm một 'ném ArgumentException' nếu ip là null hoặc rỗng. Cảm ơn một lần nữa :-) –

0

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

Bạn có thể sử dụng tính năng này để Nhận tên máy chủ trên ứng dụng cân bằng tải.

Các vấn đề liên quan