IIS AppDomain создание экземпляров - PullRequest
7 голосов
/ 29 августа 2011

У меня есть веб-сайт и веб-сервис в одном и том же виртуальном каталоге, и некоторые веб-страницы вызывают веб-сервис.

Когда вызывается веб-служба, IIS создает новый домен приложения или запускает веб-службу в том же домене приложения?

Есть ли настройки для этого? На одном из моих компьютеров создается новый домен приложений. Влияет ли на это изменение режима пула приложений с Integrated vs Classic?

1 Ответ

8 голосов
/ 29 августа 2011

Пулы приложений 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 использования применима и здесь.

...