IIS AppDomain实例化

Chr*_*ris 7 iis appdomain

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

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

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

Mat*_*ott 8

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

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

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

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

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