如何为ASP.Net应用程序保留特定于用户的数据。
我尝试了会话变量 - 当工作进程回收时效果不佳。
我需要一些可以通过我的任何应用程序类全局访问的东西。
建议最受欢迎。
我尝试使用asp.net会话状态服务器但是我遇到了一些DLL崩溃,因为它们是Unserializable。
还有其他方法可以在整个应用程序中使用持久变量吗?
答案 0 :(得分:4)
可以将ASP.NET会话状态配置为持久保存到数据库。
答案 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)
答案 4 :(得分:0)
您可以将Profile Provider与SQL数据库一起用作后备存储。
请参阅此MSDN Article
答案 5 :(得分:0)
对于流程回收,你真的没什么可做的。如果您使用智能缓存来更全面地保留信息,但仍然具有相同的工作进程限制。
我尝试在带有业务实体对象的n层设置中设计我的应用程序。我的对象的工厂方法使用缓存类似懒惰的瞬时模式。如果它在cahce,拉它。如果没有,请将其放入缓存中以供下次使用。
即
MyAppsNameSpace.MyBusinessLayerNameSpace.MyObject.GetObject(objectID)
现在当它返回我的对象时,它可能来自缓存,也可能不是,如果对象使用率很高,那么它可能会被缓存。
这可以在整个应用程序中使用,因为缓存机制是集中维护的,所以你真的不用担心它。
答案 6 :(得分:0)
如果在工作进程回收时丢失数据,则应停止使用会话的InProc持久模式。使用StateServer或SQL Server。最终,如果两者都不满足你,你可以构建自己的会话持久性模块。