Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 415
Эндрю Троелсен
Формально такой агент, вызываемый клиентом непосредственно, называется
public interface IMessage {
IDictionary Properties { get; }
}
Как видите, интерфейс IMessage определяет единственное свойство (с именем Properties), которое обеспечивает доступ к коллекции, используемой для хранения предоставленных клиентом аргументов. После наполнения объекта сообщения содержимым средой CLR, он будет передан родственному типу, называемому
Реальный, агент – это сущность, которая фактически посылает объект сообщения в канал (понятие канала будет обсуждаться ниже). Реальный агент, который (в отличие от прозрачного агента)
public abstract class RealProxy: object {
public virtual ObjRef CreateObjRef(Type requestedType);
publiс virtual bool Equals(object obj);
public virtual IntPtr GetCOMIUnknown(bool fIsMarshalled);
public virtual int GetHashCode();
public virtual void GetObjectData(SerializationInfo info, StreamingContext context);
public Type GetProxiedType();
public static object GetStubData(RеаlРrоxу rp);
public virtual object GetTransparentProxy();
public Type GetType();
public IConstructionReturnMessage InitializeServerObject(IConstructionCallMessage ctorMsg);
public virtual IMessage Invoke(IMessage msg);
public virtual void SetCOMIUnknown(IntPtr i);
public static void SetStubData(RealProxy rp, object stubData);
public virtual IntPtr SupportsInterface(ref Guid iid);
public virtual string ToString();
}
Если вы не заняты построением пользовательской реализации реального агента клиента, то единственным интересным для вас членом будет RealProxy.Invoke(). С помощью метода Invoke() сгенерированный средой CLR прозрачный агент в фоновом режиме передает форматированный объект сообщения типу RealProxy.
Каналы
После того как агенты проверят и отформатируют поставляемые клиентом аргументы, упаковав их в объект сообщении, соответствующий IMessage-совместимый тип передается от реального агента объекту канала. Каналы – это сущности, отвечающие за транспортировку сообщения удаленному объекту и, если это необходимо, за то, чтобы возвращаемое значение от удаленного объекта было доставлено обратно клиенту. В библиотеках базовых классов .NET 2.0 предлагаются готовые реализации трех каналов: