最近將動力起航的站內搜索功能進行了改造,使用了Lucene.Net+盤古分詞實現了完整的站內搜索功能(此功能改造將另開章節跟你們講講,須要源碼的能夠留下郵箱,下一章節也會貼出來),本章主要講講在改造過程當中使用多線程使用HttpContext.Current爲null的問題而總結的幾個方法,但願你們多多提意見和建議,這樣我才能提升,深感閉門造車的苦惱,但願向園子裏的大牛們學習!html
當咱們使用HttpContext.Current.Server.MapPath(strPath)獲取絕對路徑時HttpContext.Current爲null,解決辦法以下:web
#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學習
多線程下使用HttpContext.Current.Server.HtmlEncode(Htmlstring)轉碼HttpContext.Current爲null,解決辦法以下:spa
HttpUtility.HtmlEncode(Htmlstring)
從以上能夠看出,在可能的狀況下,咱們應該儘量的使用應用程序級別的方法,這樣避免沒必要要的錯誤!線程