Пулы приложений IIS запускают один рабочий процесс (по умолчанию). В рамках этого рабочего процесса для каждого приложения IIS (веб-сайта) создается AppDomain
. Насколько мне известно, любой код, выполняемый в этом приложении IIS, будет работать в том же AppDomain
(если, конечно, вы сами не создаете свои собственные дочерние домены в коде). Вы можете настроить количество рабочих процессов для каждого веб-сайта, но реально это можно сделать только в том случае, если вы обнаружите, что у вас есть проблемы с производительностью (которые не могут быть решены путем разделения пулов приложений). Если вы используете несколько доменов приложений для одного веб-сайта, код, выполняющийся в этих отдельных доменах приложений, не может совместно использовать состояние (например, сеанс InProc) и может обмениваться данными только через сериализацию - не идеально.
В отношении ASP.NET и WCF; когда они размещены в IIS, они по умолчанию работают в параллельном режиме в том же AppDomain
, что позволяет им совместно использовать состояние, но запросы WCF не обрабатываются средой выполнения ASP.NET, вместо этого перехватываются вызовы служб WCF. и обрабатывается средой выполнения WCF. (Хотя вызовы .svc
файлов по-прежнему маршрутизируются через ASP.NET изначально). В параллельном режиме вызовы WCF не подчиняются конфигурации, безопасности, олицетворению и т. Д., Которые вы, возможно, настроили для своего сайта ASP.NET.
WCF в IIS также можно запускать в режиме совместимости ASP.NET, в котором реализация WCF управляется обработчиком http и, таким образом, обрабатывается также конвейером ASP.NET. Если вы считаете, что вашим сервисам нужна только поддержка HTTP, вы можете рассмотреть возможность размещения сервиса в режиме совместимости, чтобы получить доступ к мощности и гибкости конвейера ASP.NET.
Что касается режима интегрированного и классического конвейера, то в интегрированном режиме ASP.NET запускается w3wp.exe
как интегрированная часть конвейера обработки IIS. Это означает, что все, что использует пользовательские обработчики и т. Д., Которые вы, возможно, подключили к конвейеру (даже при работе с контентом, отличным от ASP.NET, например, PHP), будет загружено и выполнено в том же AppDomain
.
В классическом режиме ASP.NET запускается в своем рабочем процессе владельца, aspnet_wp.exe
, и подключается к конвейеру обработки IIS в качестве фильтра ISAPI. Я полагаю, что та же самая механика вокруг AppDomain
использования применима и здесь.