• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

前言

         最近将动力起航的站内搜索功能进行了改造,使用了Lucene.Net+盘古分词实现了完整的站内搜索功能(此功能改造将另开章节跟大家讲讲,需要源码的可以留下邮箱,下一章节也会贴出来),本章主要讲讲在改造过程中使用多线程使用HttpContext.Current为null的问题而总结的几个方法,希望大家多多提意见和建议,这样我才能提高,深感闭门造车的苦恼,希望向园子里的大牛们学习!

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

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

        #region 获得当前绝对路径
        /// <summary>
        /// 获得当前绝对路径
        /// </summary>
        /// <param name="strPath">指定的路径</param>
        /// <returns>绝对路径</returns>
        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);
            }
        }
        #endregion

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

         多线程下使用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(然而,在不同应用程序之间如何调用也是一个问题)。

具体的大家可以参考此博文:http://www.cnblogs.com/McJeremy/archive/2008/12/01/1344660.html

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

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

     HttpUtility.HtmlEncode(Htmlstring)

 

 结束语

         从以上可以看出,在可能的情况下,我们应该尽可能的使用应用程序级别的方法,这样避免不必要的错误!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
WindowsServer2008R2中的ASP.NET环境架设发布时间:2022-07-10
下一篇:
用log4net快速构建asp.net 异常日志发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap