2010-10-20 57 views
1

标题有点复杂,但它适合我的问题。我有一个复杂的对象,更像是我需要在用户会话范围内公开的服务。大部分应用程序将存在于一两个页面中,并且大量的Ajax调用与服务进行动态交互。如果解决方案很简单,我仍然习惯于MVC,所以请原谅无知。如何将每个会话的服务实例公开给我的控制器?ASP.NET MVC长寿复杂对象

在此先感谢!

+0

这里没有问题。你需要了解什么? – tster 2010-10-20 03:32:32

+0

@tster:我明白了。 – 2010-10-20 03:46:38

+0

@John K,我明白了。我一直认为ASP.NET和webforms是分开的,所以我没有意识到人们会认为会话状态和这样的情况是不存在的。 – tster 2010-10-20 14:05:53

回答

0

也可参见该SO问题:How does the session state work in MVC 2.0?

即答案包含一个很好的代码示例如以下有关从控制器类accesssing每个用户的会话状态。

// from example 
    if (Session["QuestionAnswers"] != null) 
    { 
     return (List<QuestionAnswer>)Session["QuestionAnswers"]; 
    } 

您可以使用常规ASP.NET Session state来存储特定用户的复杂对象。

您可以存储任何会话状态,包括您的“复杂对象”值。

MSDN会话状态报价:

ASP.NET会话状态使您能够 商店,为用户 当用户浏览不同 ASP.NET页面组成检索值a Web 应用程序

以下引用来自Scott Guthrie(公司副总裁在M icrosoft开发部)支持MVC中使用普通会话状态的:今天

在ASP.NET非UI功能,如 表单验证,Windows:

Scottgu约MVC &会话状态支持行情 认证,成员,角色,网址 授权,缓存,会话状态, 档案,健康监测, 配置,编译 本地化和 HttpModules/HttpHandlers全部完全 支持MVC模型

- http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx

尽管你组织 应用程序流的方式会有所不同,我 认为你会由知识量惊喜 重叠 存在。身份验证,授权 ,缓存,配置, 编译,会话状态,简介 管理,健康监测, 管理,部署和很多 很多其他的事情是完全一样 。 MVC视图也是.aspx页面 (使用.ascx用户控件和 .master文件)。所以这个概念重用 也很重。

- http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx

+0

虽然这种方法“重”吗?换句话说,会话中的大对象会严重降低性能吗? – BennyT 2010-10-20 03:55:06

+0

取决于您的应用程序。例如:有多少用户和多少个对象,多少内存。在使用“临界点”时,您可能希望为每个用户重建复杂的对象,而不是将它们留在内存中。然而,只有您知道您的自定义应用程序何时达到需要的此类优化。除非你确实知道,否则建议不要预优化。 – 2010-10-20 03:58:55