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


    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)

     结束语

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

  • 相关阅读:
    小任务之使用SVG画柱状图~
    webpack.config.js配置遇到Error: Cannot find module '@babel/core'问题
    今日笔记
    querySelector与getElementBy等的区别
    JavaScript实现邮箱后缀提示功能
    JavaScript中按键事件的e.keyCode || e.which || e.charCode
    跳转页面&回到上一页
    echarts.js 做图表的插件
    局域网内电脑远程访问共享
    同引擎mysql数据库转导快
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3249100.html
Copyright © 2020-2023  润新知