Книга: C# для профессионалов. Том II
Контексты
Прежде чем рассматривать возможности .NET Remoting для создания серверов и клиентов, которые общаются в сети, давайте рассмотрим те случаи, когда внутри домена приложения требуется канал, осуществляющий вызов объектов через контексты.
При создании компонентов COM+ использовались контексты COM+. Контексты в .NET являются очень похожими. Как уже было сказано, один процесс может иметь несколько доменов приложений. Домен приложения является чем-то типа подпроцесса с границами безопасности и может иметь различные контексты. Контекст используется для группирования объектов с аналогичными требованиями выполнения. Контексты состоят из множества свойств и используются для перехватывания: когда к ограниченному контекстом объекту обращаются из другого контекста, перехватчик может сделать некоторую работу, прежде чем вызов достигнет объекта.
Класс, который выводится из MarsnalByRefObject
, ограничен доменом приложения. Вне домена приложения требуется прокси для доступа к объекту. Класс, который выводится из ContextBoundObject
ограничен контекстом. Вне контекста для доступа к объекту требуется прокси. Ограниченные контекстом объекты могут иметь атрибуты контекста, объект без таких атрибутов создается в контексте создателя. Ограниченный контекстом объект с атрибутами контекста создается в новом контексте или в контексте создателя, если атрибуты являются совместимыми
Чтобы понять контексты, необходимо знать некоторые термины:
? Создание домена приложения приводит к возникновению контекста по умолчанию в этом домене. Если вы возьмете экземпляр нового объекта, которому требуются другие свойства контекста, в соответствии с ними создастся новый контекст.
? Атрибуты контекста могут присваиваться классам, производным из ContextBoundObject
. Можно создать класс специального атрибута, реализуя интерфейс IContextAttribute
. .NET Framework имеет два класса атрибутов контекста: SynchronizationAttribute
и ThreadAffinityAttribute
.
? Атрибуты контекста определяют свойства контекста, необходимые объекту. Класс свойства контекста реализует интерфейс IContextProperty
. Активные свойства предоставляют приемники сообщений в цепочку вызовов. Класс ContextAttribute
, который может использоваться как базовый для специальных атрибутов, реализует как IContextProperty
, так и IContextAttribute
.
? Приемник сообщений является перехватчиком вызова метода. При этом свойства помогают работе приемников сообщений.