关于 在 HttpModule 中使用 System.Thread.Timer

王朝c#·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

在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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航