ASP.Net在整个应用程序中保留数据

时间:2009-02-26 15:29:30

标签: asp.net variables global

如何为ASP.Net应用程序保留特定于用户的数据。

我尝试了会话变量 - 当工作进程回收时效果不佳。

我需要一些可以通过我的任何应用程序类全局访问的东西。

建议最受欢迎。

我尝试使用asp.net会话状态服务器但是我遇到了一些DLL崩溃,因为它们是Unserializable。

还有其他方法可以在整个应用程序中使用持久变量吗?

7 个答案:

答案 0 :(得分:4)

可以将ASP.NET会话状态配置为持久保存到数据库。

Here is a tutorial on how to set that up.

答案 1 :(得分:1)

将数据存储在数据库(例如SQL Server)中。

答案 2 :(得分:1)

您可以将会话状态服务器更改为不在进程中,这将使其更加稳定,并将其与工作进程分开(您需要能够在服务器上启动Asp.NET状态服务,如果它还没有运行)

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"/>

此外,如果您需要在同一个域中的应用程序之间共享它,您应该能够为它们提供相同的machine key

答案 3 :(得分:1)

你应该使用Session。您可以在类似这样的类中全局访问会话状态...

HttpContext.Current.Session

为避免工作流程回收丢失会话,请使用StateServer模式。

答案 4 :(得分:0)

您可以将Profile Provider与SQL数据库一起用作后备存储。

请参阅此MSDN Article

答案 5 :(得分:0)

对于流程回收,你真的​​没什么可做的。如果您使用智能缓存来更全面地保留信息,但仍然具有相同的工作进程限制。

我尝试在带有业务实体对象的n层设置中设计我的应用程序。我的对象的工厂方法使用缓存类似懒惰的瞬时模式。如果它在cahce,拉它。如果没有,请将其放入缓存中以供下次使用。

MyAppsNameSpace.MyBusinessLayerNameSpace.MyObject.GetObject(objectID)

现在当它返回我的对象​​时,它可能来自缓存,也可能不是,如果对象使用率很高,那么它可能会被缓存。

这可以在整个应用程序中使用,因为缓存机制是集中维护的,所以你真的不用担心它。

答案 6 :(得分:0)

如果在工作进程回收时丢失数据,则应停止使用会话的InProc持久模式。使用StateServer或SQL Server。最终,如果两者都不满足你,你可以构建自己的会话持久性模块。