5

如果创建了新数据集,我需要将请求计算机的主机名存储在数据库中。为了向用户清楚地表明这一点(这都是公司内部的),我们在用户填写的表单中将其显示为三个文本框。这三个文本框是这样填充的:

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

但是,无论我从哪个客户端测试,应该在 Request.UserHostname 中提供主机名的 IP 的反向查找都不起作用,因此该字段填充了 IP 地址。如果我在服务器上使用 nslookup,则反转工作正常。对我有什么建议可以从哪里开始?非常感谢。

4

2 回答 2

4

您需要配置 IIS才能使其正常工作。或者,如果您只在一个地方需要它,您可以使用Dns.GetHostEntry进行反向查找。

每个请求的反向查找都会对性能产生严重影响,这就是默认情况下不启用它的原因。Dns.GetHostEntry如果可以的话,我会推荐这条路线。

这是我们使用的一种有用的反向查找方法:

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; }
}
于 2012-09-25T15:03:05.557 回答
0

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

您可以使用它来获取负载平衡应用程序上的主机名。

于 2015-07-16T07:20:27.620 回答