C# .Net如何在asp.Net项目的不同层之间共享会话对象

C# .Net如何在asp.Net项目的不同层之间共享会话对象,c#,asp.net,C#,Asp.net,我在应用程序启动时创建了一个列表对象,并将它们保存为会话变量 然后,我在应用程序的整个生命周期中使用这个会话变量 有时,我会在应用程序的其他层中更新此列表,以便将此会话变量传递给其他层 我应该将列表对象从asp.net传递到方法中的其他层吗?我是否应该在将要使用此对象的所有层中创建List属性,并从表示层设置属性?如果我创建一个静态列表,那么所有用户都会看到相同的列表。我希望列表是特定于会话的。您的会话变量可用以下代码: HttpContext.Current.Session[....] 因此

我在应用程序启动时创建了一个列表对象,并将它们保存为会话变量

然后,我在应用程序的整个生命周期中使用这个会话变量

有时,我会在应用程序的其他层中更新此列表,以便将此会话变量传递给其他层


我应该将列表对象从asp.net传递到方法中的其他层吗?我是否应该在将要使用此对象的所有层中创建List属性,并从表示层设置属性?如果我创建一个静态列表,那么所有用户都会看到相同的列表。我希望列表是特定于会话的。

您的会话变量可用以下代码:

HttpContext.Current.Session[....]

因此,您只需正确创建一个附加变量来减少代码。

您的会话变量可使用以下代码使用:

HttpContext.Current.Session[....]

因此,您只需要创建一个额外的层来减少代码。

我将编写应用程序的其他层来接受和返回对象列表,他们不应该意识到或关心列表在处理完毕后是否被存储。

我会编写应用程序的其他层来接受和返回对象列表,他们不应该意识到或关心列表在处理完毕后是否被存储。

我永远不会在数据访问层或业务层中使用会话变量。这就像违背了设计。我宁愿在数据访问层或业务层的函数参数中传递一个会话变量的值,它打算使用该会话变量

我永远不会在数据访问层或业务层中使用会话变量。这就像违背了设计。我更愿意在数据访问层或业务层的函数参数中传递会话变量的值,该参数打算使用该会话变量。不要将会话对象发送到数据层或其他业务逻辑。将这些东西分离出来的一个主要原因是,您可以在其他程序中重用代码

一旦您添加了一个依赖项,就像在HttpContext上一样,那么您也可以不使用这些层,而只是将它们放在一起

关于列表本身,当您需要将数据传递到业务/数据层时,请将其作为列表发送

最后,我建议,除非在大量页面上使用该列表,否则根本不要将其放入会话,而是在需要时从数据库中提取数据。会话数据必须在每次访问页面时序列化和反序列化。这增加了处理开销。如果您的应用程序处于负载平衡环境中,情况会变得更糟,因为无论是否使用会话数据,每次访问页面都必须通过网络线推拉会话数据。。。这很好地消除了让它在会议上的任何理由


然而,如果数据在大多数地方使用,那么我真的很好奇它是什么。会话不应被用作一堆对象的倾倒场。我真的希望您不要试图存储数据集、命令对象之类的东西。

不要将会话对象发送到数据层或其他业务逻辑。将这些东西分离出来的一个主要原因是,您可以在其他程序中重用代码

一旦您添加了一个依赖项,就像在HttpContext上一样,那么您也可以不使用这些层,而只是将它们放在一起

关于列表本身,当您需要将数据传递到业务/数据层时,请将其作为列表发送

最后,我建议,除非在大量页面上使用该列表,否则根本不要将其放入会话,而是在需要时从数据库中提取数据。会话数据必须在每次访问页面时序列化和反序列化。这增加了处理开销。如果您的应用程序处于负载平衡环境中,情况会变得更糟,因为无论是否使用会话数据,每次访问页面都必须通过网络线推拉会话数据。。。这很好地消除了让它在会议上的任何理由


然而,如果数据在大多数地方使用,那么我真的很好奇它是什么。会话不应被用作一堆对象的倾倒场。我真的希望您不要试图存储数据集、命令对象之类的东西。

为什么要在会话中存储一个必须在应用程序整个生命周期中都存在的对象?这听起来是一个理想的候选人。会话对于每个用户都是唯一的。@Tim Schmelter,缓存在不同的会话之间共享…@platon:正确,它的生存期正是应用程序的生存期,而不是会话,因此我想知道OP是否以错误的方式使用会话。@Tim,任务是维护它特定于会话…@platon:那么它的生命周期不应该在应用程序级别…而且,缓存不必共享。为什么要在会话中存储一个必须在应用程序生命周期中存在的对象?这听起来是一个理想的候选人。会话对于每个用户都是唯一的。@Tim Schmelter,缓存在不同的会话之间共享…@platon:正确,它的生存期正是应用程序的生存期,而不是会话,因此我想知道OP是否以错误的方式使用会话。@Tim,任务是维护特定于会话的缓存…@platon:那么它的生存期不应该在应用程序级别上…而且,缓存不必在类库(即数据层)中共享。HttpContext.Current.session?Current是HttpContext类的静态属性。因此,如果需要获取特定于特定上下文的会话对象,则无需传递它。通过此代码可以使用。对不起,我迷路了。有没有一个链接可以解释这一点,你是说我可以访问Session