你能把inProc和Session State的优点结合起来吗?

本文关键字:结合 起来 State inProc Session | 更新日期: 2023-09-27 18:09:53

是否有一种方法可以在95%的时间内使用IIS inProc方案,同时维护和更新会话状态变量?

理想情况下,如果有一个应用程序池回收,它会从会话状态服务刷新inProc数据。

使用InProc和Session State之间大约有200ms的差异,所以如果这是可能的,它将真正加快程序。否则,稳定性问题使我不得不使用会话状态。

你能把inProc和Session State的优点结合起来吗?

如果我理解正确的话,您大部分时间都想使用InProc,有时使用StateServer。当你说"95%的时间"时,看起来你需要一些自定义的东西。

所以也许你应该实现一个会话状态存储提供者。您可以使用InProc模式源代码作为起点。您还可以在这里获得StateServer提供程序的源代码。

这种方法的问题是,这两个类都是internal sealed,所以您不能真正轻松地访问它们。您可以重用它们的源代码,或者使用反射调用它们,或者使用表达式lambdas生成方法……我不认为有一个完美的解决方案。

另一种解决方案是从头开始重新构建会话状态存储,以100%满足您的需求,但这将更加复杂且容易出错。

我最终使用的解决方案是使用HttpContextBase,它有一个缓存部分。

在应用程序池的内存中缓存。所有用户都可以访问它,这对我的应用程序来说实际上是完美的。

的例子:

HttpContextBase httpContext;
      CacheObject  NCO = (CacheObject)httpContext.Cache["CacheName"];