2012-05-05 61 views
0

我需要在会话中保存一些内容。目前,我在开发计算机上使用InProc会话,但我想使用SQL服务器会话和Azure的AppFabric会话进行部署。在会话中存储对象

我创建了一个对象,其中包含几个属性,所有基元类型。我处理会话的读这样的:

SessionObject TheCurrentSession = 
    HttpContext.Current.Session["UserAppSession"] as SessionObject; 

基本上,我包裹会话变量中的对象的序列化和反序列化,每次会话加载和保存。

我想知道是否应该更好地存储每个属性的原生格式,并让包装对象读取/保存会话中的每个属性作为本机类型。

因此,举例来说,我有一个名为RecreateSession这样的方法:

public class SessionObject 
{ 
    public void RecreateSession() 
    { 
     this.SessionObjectProperty1 = 
         HttpContext.Current.Session["SessionObjectProperty1"]; 
     this.SessionObjectProperty2 = ...; 
     this.SessionObjectProperty3 = ...; 
    } 
} 

,我认为这样做会避免序列化/反序列化的过程,可以在代码的其他部分直接进行访问的值(即HTTP模块)。

是否值得更改我的会话实现?这有什么最佳做法?

感谢您的建议。

回答

1

是否值得更改我的会话实现?

只有当它使您更容易使用。

这是什么最佳实践?

你几乎已经在做它们了。创建一个单独的对象来保存几个相关的属性(可能会一起使用)并将其存储在会话中,而不是一堆单独的会话属性。

+0

好吧,你认为将序列化/反序列化保存到对象中是存储会话的更好方法,还是你认为我应该直接存储每个属性并通过从asp.net上下文中读取每个属性来创建包装对象会议?我认为无论哪种方式都可以用我的代码。 – frenchie

+0

@frenchie - 没有必要编写自定义的序列化代码。只需分配属性并根据需要进行投射就比较容易。 – Oded

+0

是的,我知道它会自动序列化;但即使框架自动处理它,它仍然必须这样做。在某些时候,这种不断的序列化/反序列化会成为一个性能/缩放问题吗? – frenchie

1

我总是创建一个自定义对象,其中每个属性引用特定的会话项目...我认为它是最好的选择。

相关问题