如何为 ASP.Net 应用程序保留用户特定的数据。
我尝试了会话变量 - 工作进程回收时不好。
我需要我的应用程序的任何类都可以全局访问的东西。
欢迎咨询。
我尝试使用 asp.net 会话状态服务器,但我得到了一些 DLL 崩溃,因为它们是不可序列化的。
有没有其他方法可以在整个应用程序中使用持久变量?
可以将 ASP.NET 会话状态配置为持久保存到数据库。
将数据存储在数据库(例如 SQL Server)中。
您可以将会话状态服务器更改为不在进程中,这将使其更加稳定,并将其与工作进程分开(如果尚未启动,您需要能够在服务器上启动 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"/>
此外,如果您需要在同一域中的应用程序之间共享它,您应该能够为它们提供相同的机器密钥
您可以使用带有 SQL 数据库的 Profile Provider 作为您的后备存储。
请参阅此MSDN 文章
对于流程回收,您无能为力。如果您巧妙地使用缓存以更全局的方式保留信息,但您仍然有相同的工作进程限制。
我尝试在具有业务实体对象的 n 层设置中设计我的应用程序。我的对象的工厂方法使用类似于惰性实例化模式的缓存。如果它在 cahce 中,拉它。如果没有,则将其放入缓存中以备下次使用。
IE
MyAppsNameSpace.MyBusinessLayerNameSpace.MyObject.GetObject(objectID)
现在当它返回我的对象时,它可能来自缓存,也可能不是,如果对象使用率很高,那么它可能会被缓存。
这可以在您的整个应用程序中使用,并且因为缓存机制是集中维护的,所以您不必担心它。
如果在工作进程回收时丢失数据,则应停止对 Session 使用 InProc 持久模式。使用 StateServer 或 SQL Server。最终,如果您都不满意,您可以构建自己的会话持久性模块。