原文:http://blogs.msdn.com/b/kaevans/archive/2011/04/11/intro-to-windbg-for-net-developers.aspx  翻译:cxfksword

当你的代码发布为产品后,无论是在其他人的电脑中运行,还是部署到服务器中,你通常不再能访问到它的程序文件,也不能观察到代码的当前运行情况和运行环境。当你的代码在新的环境运行时,有很多因素会影响到程序的运行情况,如服务器系统打了更新补丁,网络策略改变,防火墙规则限制,磁盘权限配置等等。当代码运行不正常时,你可能只能靠代码中各处输出的日志来判断运行情况。但只靠输出日志,你有时还是不能判断故障出现的原因。

在不浪费客户时间的同时做故障排除对你是个很大的挑战,因为不会有客户喜欢被一个搞技术的家伙不断问是点了那个按钮操作了哪些步骤导致程序出错的。boss也不会给你几天甚至几周的时间让你慢慢排除故障,你必须现在就知道到底发生了什么。

理想情况下,你应该能看到堆栈跟踪,能查看到当前的变量值,能调试代码。事实证明你可以做到这点。。。而且不需要附加到客户环境中!

More

现在系统中常用的获取客户端真实ip的代码如下:

// 获取IP地址
protected string GetIPAddress()
{
    string result = "";
    try
    {
        //透过代理取客户端ip
        result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? "";
        if (result == "")
        {
            //连接主机ip
            result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] ?? "";
        }
        if (result == "")
        {
            result = HttpContext.Current.Request.UserHostAddress;
        }
    }
    catch (Exception ex)
    {
    }
    return result;
}

这段代码有两个问题: 1、根据这篇文章说明,当请求经常多个代理时,HTTP_X_FORWARDED_FOR可能会附加上多个服务器ip,格式如下:

More

Page 1 / 1
Top