异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)
来源:互联网 发布:c语言指针教程 编辑:程序博客网 时间:2024/06/06 12:22
在一个项目中,为了系统执行效率更快,把一个经常用到的数据库表通过dataset放到Application中,发现在异步实现中每一次都会出现HttpContext.Current为null的异常,后来在网上查了好多资料,发现问这个问题的人多,回答的少,回答的也多数都是:引用System.Web,不要用HttpContext.Current.Application应该用System.Web.HttpContext.Current.Application,后来在网上看到一篇关于System.Runtime.Remoting.Messaging.CallContext这个类的详细介绍才知道,原来HttpContext.Current是基于System.Runtime.Remoting.Messaging.CallContext这个类,子线程和异步线程都无法访问到主线程在CallContext中保存的数据。所以在异步执行的过程会就会出现HttpContext.Current为null的情况,为了解决子线程能够得到主线程的HttpContext.Current数据,需要在异步前面就把HttpContext.Current用HttpContext的方式存起来,然后能过参数的形式传递进去,下面看看实现的方法:
public HttpContext context
{
get { return HttpContext.Current; }
set { context = value ; }
}
然后建立一个委托
public delegate string delegategetResult(HttpContext context);
下面就是实现过程的编码
protected void Page_Load(object sender, EventArgs e)
{
context = HttpContext.Current;
delegategetResult dgt = testAsync;
IAsyncResult iar = dgt.BeginInvoke(context, null, null);
string result = dgt.EndInvoke(iar);
Response.Write(result);
}
public static string testAsync(HttpContext context)
{
if (context.Application["boolTTS"] == null)
{
Hashtable ht = (Hashtable)context.Application["TTS"];
if (ht == null)
{
ht = new Hashtable();
}
if (ht["A"] == null)
{
ht.Add("A", "A");
}
if (ht["B"] == null)
{
ht.Add("B", "B");
}
context.Application["TTS"] = ht;
}
Hashtable hts = new Hashtable();
hts = (Hashtable)context.Application["TTS"];
if (hts["A"] != null)
{
return "恭喜,中大奖呀";
}
else
{
return "我猜你快中奖了";
}
}
- 异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)
- 异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)
- 异步HttpContext.Current实现取值的方法
- 设置多个Web园导致HttpContext.Current.Application、静态变量不能取值的问题
- HttpContext.Current.Session为null的问题
- System.Web.HttpContext.Current.Session为NULL值的问题?
- System.Web.HttpContext.Current.Session为NULL值的问题?
- HttpContext.Current:异步模式下的疑似陷阱之源
- HttpContext.Current.Session 和 Session 的区别
- 关于System.Web.HttpContext.Current.Session 为 null的问题
- abp项目中无法使用HttpContext.Current.Session[""]的问题
- 解决异步获取user session的方法
- HttpContext.Current.Request.Files后台取不到值的解决方法
- HttpContext.Current.Request.Files后台取不到值的解决方法
- HttpContext.Current.Cache 和HttpRuntime.Cache的区别
- HttpContext.Current.Cache 和HttpRuntime.Cache的区别
- HttpContext.Current.Cache 和HttpRuntime.Cache的区别
- HttpContext.Current.Cache 与HttpRuntime.Cache的区别
- ACM题目里遇到的单词
- window.history.go(-1)返回上页的同时刷新"上页"技术
- Fedora11 安装配置指南中文版(二)
- SQL Server 2005/2008 分页
- 222
- 异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)
- epoll LT VS ET (ZZ)
- TLS for SIP Server
- love java-->love life
- Recovery tests of ML, SQLite on.....
- .NET中如何访问被系统保护的文件夹
- 如何查看弹出窗口的源代码
- 网工之路
- Redhat AS4下安装和配置subversion(svn)