2010-03-23 27 views
1

我需要有一些物体挂在两个事件之间我很感兴趣:PreRequestHandlerExecute(其中创建我的对象的实例,并希望保存它)和PostRequestHandlerExecute(我想去的对象)。在第二次事件之后,该对象不是我需要的,并且应该通过存储或我的明确操作来丢弃。那么,我的对象应被存储在理想的情况下是每个请求(有保证不共享问题时,不同的线程中处理请求...或进程/服务器:))要求本地存储在ASP.NET(可从IHttpModule的执行代码)

要考虑到实际执行,我可以做是由HttpModule制作的,并且应该是已经编写的Web应用程序的可插入解决方案(所以在Global.asax中使用静态/实例变量提供某些状态的选项看起来不太好 - 我将不得不修改Global.asax在 web应用程序)。

Cache对于此用途似乎过于宽泛。我想看看httpContext.Application(的HttpApplicationState型)是为我好或没有,但不能得到是否正是每HttpApplication实例或没有(据我所知,你可以在不同的线程使用HttpApplication小号几个实例,因此同时服务于多个请求 - 然后使用线程之间共享的存储将无法正常工作;否则我会使用它,因为一个HttpApplication实例一次只能提供一个请求)。东西可以用在HTTP模块实例存储状态来完成,如果我知道肯定这正是势必1对1的每HttpApplication实例中运行(而我又需要证明HttpApplication实例1对1与我的HttpModule的实例)。关于这些主题的任何有价值的,有信誉的链接是非常赞赏...

将是巨大的,在里面找到特别适合于每个请求的情况下(因为否则我可以用的东西ulgy结束了...大概无论是一些“更广泛'范围的存储和一些黑客在存储中为不同的请求使用不同的密钥,或者使用线程本地的东西,并以这种方式承诺理论:IIS/ASP.NET不会从一个线程服务第一个事件,第二个从另一个线程等)事件

+0

如果我以前看到这篇文章,那么不会出现问题...... http://msdn.microsoft.com/en-gb/magazine/cc188942.aspx(请参阅有趣的HttpContext属性) – IgorK 2010-03-25 11:38:54

回答

2

尝试HttpContext.Current.Items集合。它是每个请求。

+0

看起来正是我需要的:) – IgorK 2010-03-24 08:24:07

2

为法赫德曾提到,HttpContext.Current.Items是要走的路。请注意这是每个请求,如果有多个线程为请求提供服务(有时会发生 - 不同的模块由不同的线程提供服务),但HttpContext.Current.Items仍然在它们之间共享。一些info,你可能会发现有帮助