Домены приложений

Операционные системы и среды выполнения обычно содержат определенные средства изоляции приложений друг от друга. Например, в ОС Windows для изоляции приложений используются процессы. Эта изоляция необходима, чтобы гарантировать, что код, выполняемый одним приложением, не сможет нарушить работу других, не связанных с ним приложений.

Домены приложений образуют изолированную область для безопасности, надежности, управления версиями и выгрузки сборок. Домены приложений обычно создаются базовыми средами выполнения, которые отвечают за начальную загрузку среды CLR перед запуском приложения.

В подразделах данного раздела описывается использование доменов приложений для изоляции сборок друг от друга.

Обзор включает следующие разделы.

  • Преимущества изоляции приложений

  • Связанные разделы

  • Ссылки

Преимущества изоляции приложений

Исторически сложилось так, что для разделения приложений, выполняющихся на одном компьютере, используются границы процессов. Каждое приложение загружается в отдельный процесс, который отделяет его от других приложений, выполняющихся на том же компьютере.

Приложения оказываются изолированными друг от друга, поскольку адреса в памяти привязаны к процессам; бессмысленно использовать в процессе указатель, передаваемый ему из другого процесса. Кроме того, прямые вызовы между процессами невозможны. Вместо этого необходимо использовать прокси, которые обеспечивают уровень косвенности.

Перед запуском управляемый код должен пройти процесс проверки (если администратор не даст разрешение пропустить проверку). В процессе проверки определяется, может ли код предпринимать попытки обращения к неверным адресам памяти или осуществлять другие действия, способные привести к нарушению правильной работы процесса, в котором выполняется этот код. Код, прошедший проверку, называется типобезопасным. Возможность проверки кода на безопасность типа позволяет среде CLR обеспечивать такой же высокий уровень изоляции процессов друг от друга, как и при использовании границ процессов, но со значительно более низкими затратами по производительности.

Домены приложений предоставляют среде CLR более безопасные и гибкие блоки, которые могут использоваться для разделения отдельных приложений. В одном процессе можно запустить несколько доменов приложений с таким же уровнем изоляции, какой обеспечивают отдельные процессы, но без дополнительных издержек на межпроцессные вызовы или переключение между процессами. Возможность выполнения нескольких приложений в одном процессе значительно повышает масштабируемость серверов.

Изоляция приложений также играет важную роль в обеспечении безопасности. Так, например, можно запустить элементы управления нескольких веб-приложений в одном процессе обозревателя так, что эти элементы управления не смогут получить доступ к данным и ресурсам друг друга.

Изоляция приложений при помощи доменов приложений имеет следующие преимущества.

  • Сбои в одном из приложений не затронут прочие приложения. Поскольку типобезопасный код не может вызывать сбои в памяти, использование доменов приложений гарантирует, что код, выполняющийся в одном домене, не окажет воздействия на другие приложения процесса.

  • Можно прекратить выполнение отдельных приложений, не останавливая процесс целиком. Использование доменов приложений позволяет выгружать код, используемый отдельным приложением.

    ПримечаниеПримечание

    Невозможно выгружать отдельные сборки или типы.Выгрузить можно только домен целиком.

  • Код, используемый одним приложением, не может иметь непосредственного доступа к коду или ресурсам другого приложения. В среде CLR эта изоляция реализована за счет запрета прямых вызовов между объектами в различных доменах приложений. Объекты, передаваемые от домена к домену, копируются или взаимодействуют через прокси. Если объект копируется, вызов этого объекта является локальным. То есть вызывающий и вызываемый объекты находятся в одном домене приложения. Если доступ к объекту осуществляется через прокси, осуществляется удаленный вызов объекта. В этом случае вызывающий и вызываемый объекты находятся в разных доменах приложений. При междоменных вызовах используется та же инфраструктура удаленных вызовов, что и при вызовах между двумя разными процессами или двумя разными компьютерами. Для правильной JIT-компиляции вызова метода метаданные используемого объекта должны быть доступны для обоих доменов приложений. Если вызывающий домен не имеет доступа к метаданным для вызванного объекта, компиляция может завершиться ошибкой с исключением типа System.IO.FileNotFound. Дополнительные сведения см. в разделе Remote Objects. Механизм определения способов междоменного доступа для объекта зависит от объекта. Дополнительные сведения см. в разделе Класс MarshalByRefObject.

  • Поведение кода определяется границами приложения, в котором он выполняется. Другими словами, домен приложения предоставляет параметры конфигурации, такие как политики управления версиями приложения, местоположение удаленных сборок, к которым выполняется обращение, и сведения о том, где следует искать локальные сборки, загруженные в домен.

  • Разрешения, предоставленные коду, могут управляться доменом приложения, в котором выполняется этот код.

К началу

Связанные разделы

Заголовок

Описание

Домены приложений и сборки

Описание отношения между доменами приложений и сборками.

Домены приложений и потоки

Описание отношения между доменами приложений и потоками операционной системы.

Программирование с использованием доменов приложений

Описание методики программирования с учетом доменов приложений.

Общие сведения о размещении

Описание создания и настройки доменов приложений.

Узлы среды выполнения

Описание использования базовой среды выполнения.

К началу

Ссылки

System.MarshalByRefObject

К началу