文档章节

ASP.NET多线程下使用HttpContext.Current为null解决方案

清山博客
 清山博客
发布于 2016/07/15 19:59
字数 359
阅读 13
收藏 0

问题一:多线程下获取文件绝对路径

  当我们使用HttpContext.Current.Server.MapPath(strPath)获取绝对路径时HttpContext.Current为null,解决办法如下: 

      /// 
        /// 获得当前绝对路径
        /// 
        /// 指定的路径
        /// 绝对路径
        public static string GetMapPath(string strPath)
        {
            if (strPath.ToLower().StartsWith("http://"))
            {
                return strPath;
            }
            if (HttpContext.Current != null)
            {
                return HttpContext.Current.Server.MapPath(strPath);
            }
            else //非web程序引用
            {
                strPath = strPath.Replace("/", "\\");
                if (strPath.StartsWith("\\") || strPath.StartsWith("~"))
                {
                    strPath = strPath.Substring(strPath.IndexOf('\\', 1)).TrimStart('\\');
                }
                return System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath);
            }
        }

问题二:多线程下获取缓存问题

 多线程下使用HttpContext.Current.Cache.Get(key)获取缓存时HttpContext.Current为null,解决办法如下:

HttpRuntime.Cache.Get(key);

从MSDN上的解释可以看出,HttpRuntime.Cache是应用程序级别的,而HttpContext.Current.Cache是针对当前WEB上下文定义的。

然而,实际上,这二个都是调用的同一个对象,不同的是:HttpRuntime下的除了WEB中可以使用外,非WEB程序也可以使用。

而HttpContext则只能用在WEB中。因此,在可能的情况下,我们尽可能使用HttpRuntime(然而,在不同应用程序之间如何调用也是一个问题)。

问题三:多线程下使用Html转码问题

多线程下使用HttpContext.Current.Server.HtmlEncode(Htmlstring)转码HttpContext.Current为null,解决办法如下:

HttpUtility.HtmlEncode(Htmlstring)

总之,HttpContext不是万能的,当多线程调用,或是用机器模拟调用时,此时是没有HttpContext上下文的。

详细讲解可以看下这篇文章 http://www.cnblogs.com/fish-li/archive/2011/08/21/2148640.html#_label4


本文转载自:http://blog.csdn.net/a497785609/article/details/43020169

共有 人打赏支持
清山博客
粉丝 3
博文 142
码字总数 30397
作品 0
广州
私信 提问
修复迁移后Net Standard项目中的错误

接上一章,项目编译结果如下: 解决依赖dll引用 在Net Framework项目的引用如下: 各引用和作用: log4net(1.10.0.0) 用于写框架日志 Castle.DynamicProxy(1.1.5.1) 用于代理类生成 Micosoft...

dotNET跨平台
2018/04/23
0
0
Asp.net(c#)实现多线程断点续传

http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.html 以前一直错误的认为在ASP.NET中无法通过编程方式实现多线程断点续传,今天终于获得了这样一个解决方案,让我明白要学习的东...

晨曦之光
2012/03/09
129
0
使用 Phalanger 整合 PHP 和 .Net

Phalanger 是一种 PHP 语言编译器,也是针对 .NET 的 PHP 运行时。 它可以用于把 PHP web 项目编译成 .NET 字节码,并在 Windows 中使用 IIS 或者在 Linux 上使用 Mono 和 Apache 作为 ASP....

墙头草
2012/04/11
1K
14
用分布式缓存提升ASP.NET Core性能

得益于纯净、轻量化并且跨平台支持的特性,ASP.NET Core作为热门Web应用开发框架,其高性能传输和负载均衡的支持已广受青睐。实际上,10-20台Web服务器还是轻松驾驭的。有了多服务器负载的支...

2018/04/13
0
0
周公51CTO博客有价值文章整理

说明:为方便朋友们查看本博客的文章,特地整理了本博客中周公认为值得一看的文章,不过有些文章因为年代久远且技术更新快的原因,里面所讲述的方法或者理论不再适合,请大家斟酌。 asp.net ...

周金桥
2018/06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
4
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
4
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
4
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
4
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部