2012-01-04 83 views
0

我正在编写一个基本的RESTful服务,并决定使用ASP.NET MVC 3来完成任务。我的应用程序将负责维护每个用户的持久连接(现在)。我假设Application_Start是注册静态/共享状态(如持久连接)的地方,但在阅读Unity.MVC3的文档后,似乎每个请求/响应周期都会触发创建服务(通过调用Application_Start)。如何在ASP.NET MVC 3应用程序中实现共享状态?

文档I refer to说:

在每次请求,一个UpperCaseService,一个LowerCaseService和一个ExampleContext由DependencyResolver通过Unity实例化。在请求结束时,ExampleContext自动配置

读取其他文件后,从我已经假定,的Application_Start将每个AppDomain称为催生了(再次假设,这将是多少附近核心服务器上有)。

那么,在IIS服务器创建的所有AppDomain之间共享一个维持一组持久连接到服务器的有效方式,即在请求/响应阶段幸存下来,并且如果可能的话,将共享这些连接。

这可能有助于提及此Web服务只会被其他网站使用。它本质上是一个认证代理服务器,但是,将来它会做更多的事情。因此,我不能只缓存响应,因为未来的请求将被要求,并且重新认证不是一种选择。

+0

在IIS中,目录被定义为应用程序。该“应用程序”映射到appPool(这是一个进程)。许多应用程序可以映射到appPool进程。在一个过程中,CLR将创建一个默认的appDomain(在流程中被认为是一个管理边界)。您的ASP.Net应用程序在该进程和该应用程序域中运行 - 而不是每个核心的多个应用程序域。每个请求将从线程池中提供。如果您将状态存储在proc中,则该appDomain中的应用程序将可以访问它......但是。 – bryanmac 2012-01-05 01:02:54

+0

但是...您必须关心的问题是appPools可以回收(默认情况下)。因此,你的状态是脆弱的 - 这不是很RESTful ... – bryanmac 2012-01-05 01:03:50

+0

...即使许多应用程序可以映射到该appPool过程(托管,共享管理),你的应用程序将被映射到1.把应用程序放在不同的位置进程提供隔离和能力,以不同的身份运行等... – bryanmac 2012-01-05 01:05:29

回答

1

如果您想要在AppDomain重新启动并在多个ASP.NET应用程序之间共享状态,您将不得不离开IIS进程并将其存储在可从所有应用程序访问的中央位置。数据库是一个很好的候选人。

+1

需要共享的是TCP连接。不是在不同的应用程序之间,而是在我认为是多线程或应用程序域的范围内。我不确定有多少应用程序域用于ASP.NET应用程序,并且是否为每个请求调用了Application_Start。这是我写的第一个ASP.NET应用程序。 – 2012-01-04 12:33:47

相关问题