IIS AppDomain实例化

时间:2011-08-29 13:46:11

标签: iis appdomain

我在同一个虚拟目录下有一个网站和一个Web服务,有些网页调用了Web服务。

调用Web服务时,IIS是否会创建新的AppDomain,还是在同一AppDomain中运行Web服务?

有这样的设置吗?在我的一台机器上,它似乎创建了一个新的AppDomain。更改Integrated vs Classic中的应用程序池模式会影响这个吗?

1 个答案:

答案 0 :(得分:8)

IIS应用程序池运行单个工作进程(默认情况下)。在该工作进程中,为每个IIS应用程序(网站)创建AppDomain。据我所知,在该IIS应用程序中执行的任何代码都将在同一AppDomain中运行(当然,除非您自己在代码中创建自己的子应用程序域)。您可以调整每个网站的工作进程数,但实际上只有在您发现性能问题(通过隔离应用程序池无法解决)时才会这样做。如果您为每个网站运行多个应用程序域,则在这些单独的应用程序域中运行的代码不能共享状态(例如InProc会话),并且只能通过序列化进行通信 - 不理想。

关于ASP.NET和WCF;当在IIS中托管时,它们默认以并行模式运行,在同一AppDomain内,这允许它们共享状态,但是ASP.NET运行时不处理WCF请求,而是调用WCF服务由WCF运行时拦截和处理。 (尽管最初仍然通过ASP.NET路由调用.svc文件。在并行模式下,WCF调用不遵守您为ASP.NET网站配置的配置,安全性,模拟等。

IIS上的WCF也可以在ASP.NET兼容模式下运行,其中WCF实现由http处理程序管理,因此也由ASP.NET管道处理。如果您认为您的服务仅需要HTTP支持,您可以考虑以兼容模式托管服务,以获得ASP.NET管道的强大功能和灵活性。

关于集成和传统管道模式,在集成模式下,ASP.NET由w3wp.exe作为IIS处理管道的集成部分运行。这意味着您可能已插入管道的任何使用自定义处理程序等的任何内容(即使在提供非ASP.NET内容(例如PHP)时)也将在同一AppDomain中加载和执行。

在经典模式下,ASP.NET在其所有者工作进程aspnet_wp.exe中运行,并作为ISAPI筛选器连接到IIS处理管道。我相信AppDomain用法的相同机制也适用于此。