关于WCF访问跨越站点获取文件路径的AppDomain方法区别与HttpContext

第一:跨域,获取其他站点文件路径的方法:System.AppDomain.CurrentDomain.BaseDirectory

第二:对于开发人员来说,他们并不知道网站会被部署在哪个目录下,因此不可能写出绝对路径,他们只知道相对于网站根目录的相对路径,为了定位文件路径,只能调用HttpContext.Current.Request.MapPath或者 HttpContext.Current.Server.MapPath来获取文件的绝对路径。如果HttpContext.Current返回了null,那该如何如何访问文件?

答案:System.AppDomain.CurrentDomain.BaseDirectory

第三:安全使用 HttpContext 

HttpContext context = HttpContext.Current;
    if( context != null ) {
        // 能运行到这里,就肯定是在处理ASP.NET请求,我们可以放心地访问Request的所有数据
        sb.AppendLine("Url:" + context.Request.RawUrl);

        // 还有记录什么数据,您自己来实现吧。
    }
就是一个判断,解决了一些为null 的问题,所以请忘记下面这类不安全的写法吧

第四:总结HttpContext: 当前线程是指与【当前请求】相关的线程。

1. 定时器的回调。
2. Cache的移除通知。
3. APM模式下异步完成回调。
4. 主动创建线程或者将任务交给线程池来执行。 

在1,2,3情况中,访问HttpContext.Current将会返回 null 。

3.的解决方案答案有二种:

1. 在类型中添加一个字段来保存HttpContext的引用(异步开始前)。
2. 将HttpContext赋值给BeginXXX方法的最后一个参数(object state)

建议优先选择第二种方法,因为可以防止以后他人维护时数据成员被意外使用。

4.本身不是当前线程,所以不必讨论。

ths:http://www.cnblogs.com/fish-li/archive/2013/04/06/3002940.html


posted @ 2013-04-26 20:19  365lei  阅读(1173)  评论(0编辑  收藏  举报