1

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

我尝试了会话变量 - 工作进程回收时不好。

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

欢迎咨询。

我尝试使用 asp.net 会话状态服务器,但我得到了一些 DLL 崩溃,因为它们是不可序列化的。

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

4

7 回答 7

4

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

这是有关如何设置它的教程。

于 2009-02-26T15:31:53.293 回答
1

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

于 2009-02-26T15:30:34.933 回答
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"/>

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

于 2009-02-26T15:36:07.090 回答
1

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

HttpContext.Current.Session

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

于 2009-02-26T15:43:00.257 回答
0

您可以使用带有 SQL 数据库的 Profile Provider 作为您的后备存储。

请参阅此MSDN 文章

于 2009-02-26T15:31:53.963 回答
0

对于流程回收,您无能为力。如果您巧妙地使用缓存以更全局的方式保留信息,但您仍然有相同的工作进程限制。

我尝试在具有业务实体对象的 n 层设置中设计我的应用程序。我的对象的工厂方法使用类似于惰性实例化模式的缓存。如果它在 cahce 中,拉它。如果没有,则将其放入缓存中以备下次使用。

IE

MyAppsNameSpace.MyBusinessLayerNameSpace.MyObject.GetObject(objectID)

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

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

于 2009-02-26T15:34:54.673 回答
0

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

于 2009-02-26T22:23:54.707 回答