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

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

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

非常欢迎建议。

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

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

有帮助吗?

解决方案

ASP.NET会话状态可以被配置为持续到数据库。

下面是如何设置一个教程。

其他提示

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

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

HttpContext.Current.Session

为了避免工作进程回收丢失会话,请使用 状态服务器 模式。

您可以更改会话状态服务器不会在过程中,这将使它更稳定,也从工作进程单独它(你需要能够启动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"/>

此外,如果您需要在应用程序之间共享在同一个域中,你应该能够给他们同样的机键

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

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

IE

MyAppsNameSpace.MyBusinessLayerNameSpace.MyObject.GetObject(objectID)

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

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

您可以使用配置文件提供一个SQL数据库作为后备存储。

请参阅此 MSDN文章

如果您在工作进程回收,那么你应该停止使用该会话的是InProc持久性模式丢失数据。使用StateServer或SQL Server。最终,你可以建立自己的会话持久性模块,如果没有满足你。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top