zoukankan      html  css  js  c++  java
  • ASP.NET多线程下使用HttpContext.Current为null解决方案

    前言

             最近将动力起航的站内搜索功能进行了改造,使用了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)

     结束语

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

  • 相关阅读:
    Codeforces467C George and Job
    Codeforces205E Little Elephant and Furik and RubikLittle Elephant and Furik and Rubik
    Codeforce205C Little Elephant and Interval
    51nod1829 函数
    51nod1574 排列转换
    nowcoder35B 小AA的数列
    Codeforce893E Counting Arrays
    gym101612 Consonant Fencity
    CodeForces559C Gerald and Giant Chess
    CodeForces456D A Lot of Games
  • 原文地址:https://www.cnblogs.com/beimeng/p/3248889.html
Copyright © 2011-2022 走看看