Книга: C# для профессионалов. Том II
Активизация объектов, активизированных клиентом
Активизация объектов, активизированных клиентом
Удаленные объекты могут хранить состояние для клиента. Activator.CreateInstance()
создает активированный клиентом удаленный объект. С помощью метода Activator.GetObject()
удаленный объект создается при вызове метода и разрушается, когда метод заканчивается. Объект не хранит состояние сервера. В этом отличие от Activator.CreateInstance()
. С помощью статического метода CreateInstance()
запускается последовательность активации для создания удаленного объекта. Этот объект живет, пока не закончится время аренды и не произойдет сборка мусора. Позже мы рассмотрим механизм аренды.
Некоторые из перезагруженных методов Activator.CreateInstance()
используются только для создания локальных объектов. Для получения удаленных объектов требуется метод, куда можно передавать activationAttributes
. Один из таких перезагруженных методов используется в примере. Этот метод получает два строковых параметра, первый из которых является именем сборки, второй — типом, а третий — массивом объектов. В объектном массиве канал и имя объекта определяются с помощью UrlAttribute
. Чтобы использовать класс UrlAttribute
, должно быть определено пространство имен System.Runtime.Remoting.Activation
.
object [] attrs = { new UrlAttribute("tcp://localhost:8086/Hello") };
ObjectHandle handle =
Activator.CreateInstance("RemoteHello",
"Wrox.ProfessionalCSharp.Hello", attrs);
if (handle == null) {
Console.WriteLine("could not locate server");
return 0;
}
Hello obj = (Hello)handle.Unwrap();
Console.WriteLine(obj.Greeting("Christian"));
Конечно, для активизированных клиентом объектов также возможно использование оператора new
вместо класса Activator
. Таким образом, мы должны зарегистрировать активизированный клиентом объект с помощью RemotingConfiguration.RegisterActivatedClientType()
. В архитектуре активизированных клиентом объектов оператор new не только возвращает прокси, но также создает удаленный объект:
RemotingConfiguration.RegisterActivatedClientType(
typeof (Hello), "tcp://localhost:8086/HelloServer");
Hello obj = new Hello();
- Активизация объектов
- Определение классов и создание объектов
- Активизация
- Иерархия объектов в InterBase
- Имена объектов длиной 68 символов
- Создание объектов Collection
- 3.3. Определение объектов защиты
- 2.3.6. Задание объектов физической памяти
- Определение контекстно-связанных объектов
- 6.2. Описание объектов
- Активация хорошо известных объектов
- Манипулирование клиентом