Книга: 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();

Оглавление книги


Генерация: 1.954. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз