加载URL时IIS中实际发生了什么?

时间:2012-12-21 08:08:05

标签: asp.net asp.net-mvc iis web-applications web

首先,希望你们都有一个美好的圣诞节:)

我在过去几年一直是桌面应用程序开发人员,但我现在正在从事ASP.NET全职工作(工作移动:))

所以在过去的几天里,我发现自己越来越想知道当新访客访问我的网址时实际发生了什么......

我刚刚开发了一个非常简单的基于Signal R的应用程序,我需要在所有会话中共享一些单例,现在在桌面上这非常简单,但我对网络根本不确定:(

所以基本上,这是这个问题..

当有5个人访问我的网址时,IIS会做什么呢,他们都会获得一个单独的应用实例,还是他们使用相同的实例?如果你能把它分解成简单的术语,那就太棒了! :)

另外,假设我有一个具有静态单例的类库 - 那是所有会话中该类的唯一实例?

希望这是有道理的:)

感谢您的帮助!

欢呼声。 STE。

2 个答案:

答案 0 :(得分:1)

这称为 IIS生命周期
必须直接从Microsoft和IIS的创建者那里阅读完整的详细信息 对于所有IIS都不一样。

Life Cycle Overview for IIS 7.0

Life Cycle Overview for IIS 5.0 and 6.0

如果您在互联网上搜索,还有更多。

  

他们是否都获得了应用程序的单独实例,或者他们是否使用相同的实例   一个

如果对同一个应用程序(web garden)使用多个池,那么它们会在池中拆分请求,否则一个池就会处理该页面。

该页面可以从不同的线程进行处理,但会话中存在全局锁定,因此如果您使用MS会话,页面将以串行方式处理(期望未使用会话的页面)

每个池都是一个保存静态数据的实例,对于来自该池的所有请求都是相同的。如果您使用两个池,则会有两组不同的静态数据。

有关会话锁定的一些问题: Trying to make Web Method AsynchronousWeb app blocked while processing another web app on sharing same session

答案 1 :(得分:1)

如果您有默认的IIS安装,那么您将拥有一个将为所有请求提供服务的应用池。因此,您的示例中的所有5个人都将共享静态单例。

但如果您需要扩展,那么您将拥有多个应用池。

应用程序池是应用程序的一个实例。

如果静态数据库用于数据库连接,那么我建议您查看替代方法,这样您就不需要静态数据了。如果它是与您的用户感兴趣的业务相关的东西,那么如果您需要扩展,那么您最好在其他方式之间在客户之间共享。