在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言最近将动力起航的站内搜索功能进行了改造,使用了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上下文定义的。 具体的大家可以参考此博文:http://www.cnblogs.com/McJeremy/archive/2008/12/01/1344660.html 问题三:多线程下使用Html转码问题多线程下使用HttpContext.Current.Server.HtmlEncode(Htmlstring)转码HttpContext.Current为null,解决办法如下: HttpUtility.HtmlEncode(Htmlstring)
结束语从以上可以看出,在可能的情况下,我们应该尽可能的使用应用程序级别的方法,这样避免不必要的错误! |
请发表评论