Книга: C# для профессионалов. Том II

Объекты прокси

Объекты прокси

Методы Activator.GetObject() и Activator.CreateInstance() возвращают клиенту прокси. На самом деле создается два прокси (прозрачный и реальный). Прозрачный прокси выглядит как удаленный объект, он реализует все открытые методы удаленного объекта, вызывая метод Invoke() реального прокси. Реальный прокси посылает сообщения в канал посредством приемников сообщений.

С помощью RemotingServices.IsTransparentProxy() проверяется, является ли объект на самом деле прозрачным прокси. Можно также добраться до реального прокси с помощью RemotingServices.GetRealProxy(). Используя отладчик, легко получить все свойства реального прокси:

ChannelServices.RegisterChannel(new TCPChannel());
Hello obj =
 (Hello)Activator.GetObject(typeof(Hello), "tcp://localhost:8086/Hi");
if (obj == null) {
 Console.WriteLine("could not locate server");
 return 0;
}
if (RemotingServices.IsTransparentProxy(Obj)) {
 Console.WriteLine("Using a transparent proxy");
 RealProxy proxy = RemotingServices.GetRealProxy(obj);
 // proxy.Invoke(message);
}

Подключаемость прокси

Реальный прокси может заменяться специально созданным прокси. Специально созданный прокси расширяет базовый класс System.Runtime.Remoting.RealProxy. Мы получаем тип удаленного объекта в конструкторе специального прокси. Вызов конструктора для RealProxy создает прозрачный прокси в дополнение к реальному. В конструкторе могут быть доступны зарегистрированные каналы с помощью класса ChannelServices для создания приемника сообщений в методе IChannelSender.CreateMessageSink(). Помимо реализации конструктора, специальный канал переопределяет метод Invoke(). В Invoke() получают сообщение, которое затем анализируется и посылается в приемник сообщений.

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


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