C# 是否可以在asp.net中序列化/反序列化会话对象

C# 是否可以在asp.net中序列化/反序列化会话对象,c#,asp.net,session,serialization,C#,Asp.net,Session,Serialization,我在web.config <sessionState mode="InProc" timeout="1440" cookieless="false"> 然而,由于某些原因,会话正在超时。所以我要做的就是,如果会话过期,那么重新加载保存的会话,如果会话序列化是可行的是否可以保存会话对象,然后重新加载它?只需增加会话超时属性即可。如果希望对会话本身进行更细粒度的控制,可以将sessionState模式更改为使用状态服务器或SQL server()Johnny5的评论可能一针见血——

我在
web.config

<sessionState mode="InProc" timeout="1440" cookieless="false">


然而,由于某些原因,会话正在超时。所以我要做的就是,如果会话过期,那么重新加载保存的会话,如果会话序列化是可行的是否可以保存会话对象,然后重新加载它?

只需增加会话超时属性即可。如果希望对会话本身进行更细粒度的控制,可以将sessionState模式更改为使用状态服务器或SQL server()

Johnny5的评论可能一针见血——您的进程将在一段时间不活动后关闭,所有进程内的会话都将丢失。我不认为VisualStudio下的IISExchange提供了一种控制这一点的方法,所以请考虑在开发过程中在充分的IIS下运行,并将应用程序池的“空闲超时”属性增加到1440。 但是,如果您确实在寻找保存会话的方法,那么Global.asax中的session_Start和session_End事件就是这样做的一个地方。HttpSessionState不可序列化,因此您需要使用不同的序列化程序(如Ernesto所建议的)或提取所有会话项并将它们放入不同类型的可序列化集合中。(HttpApplication.Session属性是只读的,因此在任何情况下都可能最容易采用后一种方法,因为您不能只交换完整的会话实例。)

但是请注意:如果您使用InProc,您将遇到会话结束的问题——除了最琐碎的用途之外,它对所有用途来说都太脆弱了。由于各种原因(预定义的时间间隔、高内存使用率、不活动等),应用程序池会定期进行自我循环,在重新启动之前,您将无法获得nice Session_End事件,因此,如果会话未被持久化,您将丢失会话

这就是为什么每个人都告诉你,如果你对你的会话毫不在意,就使用进程外提供程序。ASP.NET附带的SQL Server和StateServer模式是显而易见的选择,但如果您希望进行长期存储,则可能会遇到问题,因为它们不会触发会话结束事件


我的雇主(ScaleOut软件)有一个罕见的进程外会话提供者,可以在会话结束时启动会话。这是一个商业产品,但如果您只需要基本需求,不需要ScaleOut SessionServer提供的所有可扩展性和容错性,它可以在单个服务器上免费运行。

确保会话状态是超时状态。请参见@Ernesto我正在运行visual studio,会话将在此处超时。我没有在IIS中部署。序列化
会话
对象?只要会话中存储的所有内容都可以序列化,当然可以序列化。@dbugger如何序列化/反序列化会话对象?会话时间1440为24小时,但是会话时间将在15分钟后过期。我的问题是是否可以序列化/反序列化会话对象。会话本身不应该过期。至于项目,这取决于项目是否可序列化。但是您当然可以枚举会话中的项目。此外,如果您的会话模式是
InProc
,这意味着它存储在工作进程的内存中,那么询问“这真的是我应该解决的问题吗”@Kashif也会有所帮助。如果工作进程回收,则无论超时属性如何,您都将丢失会话。我认为,默认情况下,进程在20分钟不活动后循环使用。您能提供类似于任何Microsoft博客或社区的有关此方面的知识来源吗?