在HttpModule中使用 System.Thread.Timer 可以在一定程度上实现 定时任务/后台任务 只是在 Timer的TimerCallback的代理方法,将在一个新线程中运行 若在方法中/或者该方法调用的一些方法中, 调用了 System.Web.HttpContext.Current 都将返回null *** 如现在给上海贝尔作的一个eKap项目中,是用IBatisNet组件, 该组件中 namespace IBatisNet.DataMapper.SessionContainer { /// <summary> /// Build a session container for a Windows or Web context. /// </summary> public class SessionContainerFactory { #region Methods /// <summary> /// Get a session container for a Windows or Web context. /// </summary> /// <returns></returns> static public ISessionContainer GetSessionContainer() { if (System.Web.HttpContext.Current == null) { return new WindowSessionContainer(); } else { return new WebSessionContainer(); } } #endregion } } 其中 WebSessionContainer 类: /// <summary> /// Session container for web application. /// </summary> public class WebSessionContainer : ISessionContainer {
#region Constants
/// <summary> /// Token for SqlMapConfig xml root. /// </summary> private const string LOCAL_SESSION = "_IBATIS_LOCAL_SQLMAPSESSION_";
#endregion
#region Constructor (s) / Destructor
/// <summary> /// Constructor /// </summary> public WebSessionContainer() { System.Web.HttpContext.Current.Items[LOCAL_SESSION] = null; } #endregion
#region ISessionContainer Members
#region Properties /// <summary> /// Get the local session /// </summary> public SqlMapSession LocalSession { get { // add by sharper if(System.Web.HttpContext.Current != null) { return System.Web.HttpContext.Current.Items[LOCAL_SESSION] as SqlMapSession;
}else { return null; }
} } #endregion
#region Methods /// <summary> /// Store the local session on the container. /// Ensure that the session is unique for each thread. /// </summary> /// <param name="session">The session to store</param> public void Store(SqlMapSession session) { System.Web.HttpContext.Current.Items[LOCAL_SESSION] = session; }
/// <summary> /// Remove the local session from the container. /// </summary> public void Dispose() { System.Web.HttpContext.Current.Items[LOCAL_SESSION] = null; }
#endregion
#endregion } 其中原先 LocalSession 属性没有判断 System.Web.HttpContext.Current 是否为null 所以会引发一个 NullReferenceException 
|