繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> 评论及其它 >> 关于 在 HttpModule 中使用 System.Thread.Timer

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

2005-01-09 21:00:22  作者:xdev  来源:互联网  浏览次数:2  文字大小:【】【】【
简介: 在HttpModule中使用 System.Thread.Timer 可以在一定程度上实现 定时任务/后台任务  只是在 Timer的TimerCallback的代理方法,将在一个新线程中运行 若在方法中/或者该方法调用的一些...

在HttpModule中使用 System.Thread.Timer

可以在一定程度上实现 定时任务/后台任务

只是在 Timer的TimerCallback的代理方法,将在一个新线程中运行

若在方法中/或者该方法调用的一些方法中, 调用了 System.Web.HttpContext.Current 都将返回null

***

如现在给上海贝尔作的一个eKap项目中,是用IBatisNet组件, 该组件中

namespace IBatisNet.DataMapper.SessionContainer

{

///

/// Build a session container for a Windows or Web context.

///

public class SessionContainerFactory

{

#region Methods

///

/// Get a session container for a Windows or Web context.

///

///

static public ISessionContainer GetSessionContainer()

{

if (System.Web.HttpContext.Current == null)

{

return new WindowSessionContainer();

}

else

{

return new WebSessionContainer();

}

}

#endregion

}

}

其中 WebSessionContainer 类:

///

/// Session container for web application.

///

public class WebSessionContainer : ISessionContainer

{

#region Constants

///

/// Token for SqlMapConfig xml root.

///

private const string LOCAL_SESSION = "_IBATIS_LOCAL_SQLMAPSESSION_";

#endregion

#region Constructor (s) / Destructor

///

/// Constructor

///

public WebSessionContainer()

{

System.Web.HttpContext.Current.Items[LOCAL_SESSION] = null;

}

#endregion

#region ISessionContainer Members

#region Properties

///

/// Get the local session

///

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

///

/// Store the local session on the container.

/// Ensure that the session is unique for each thread.

///

/// The session to store

public void Store(SqlMapSession session)

{

System.Web.HttpContext.Current.Items[LOCAL_SESSION] = session;

}

///

/// Remove the local session from the container.

///

public void Dispose()

{

System.Web.HttpContext.Current.Items[LOCAL_SESSION] = null;

}

#endregion

#endregion

}

其中原先 LocalSession 属性没有判断

System.Web.HttpContext.Current 是否为null

所以会引发一个 NullReferenceException

责任编辑:admin
相关文章