在ASP.NET 3.5(使用IIS6)中,是否为每个请求创建了AppDomains?我知道所有应用程序在w3wp.exe下都有自己的AppDomain,但整个AppDomain的工作原理是什么?
我今天和一位试图说服我的同事争论说,如果一个ASP.NET应用程序有一个静态对象(或Singleton类),那么这个对象将在所有请求之间共享.我认为这是错误的.我对吗?我如何说服我的同事?
谢谢!
我很遗憾地说你的同事是对的.在ASP.NET应用程序中,IIS中配置的每个应用程序都在其自己的AppDomain中运行,AppDomain是单个对象的范围.所以App1中的单例可用于App1的所有请求(如果不仔细处理,可能会成为并发),但App2中的请求将无法访问App1中的单例.
(来源:microsoft.com)
MSDN杂志中的这个图表有助于展示每个应用程序如何在自己的AppDomain中隔离.虽然该图显示了IIS5工作进程(aspnet_wp.exe),但IIS6工作进程对于配置为在同一应用程序池中运行的应用程序类似.