Delphi - сбориник статей


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



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

Приложения изолируются прежде всего из-за того, что адресные указатели зависят от процесса. Указатель, переданный из одного приложения другому, никак не может использоваться в нем. Более того, вы не можете из одного процесса обратиться непосредственно к другому. Вместо этого вы должны использовать механизм представителей (proxy), которые реализуют косвенные вызовы, как это делается в СОМ (Component Object Model - компонентная модель объектов).

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

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

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

    Замечание:
    Нельзя выгрузить сборку или тип, но можно - домен.

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



Начало  Назад  Вперед