publiс interface IChannel {
string ChannelName { get; }
int ChannelPriority { get; }
string Parse(string url, ref String objectURI);
}
Как видите, каждый канал получает понятное строковое имя, а также свой уровень приоритета. Например, если добавить в метод Main() приложения SimpleRemoteObjectClient следующую) программную логику
// Список всех зарегистрированных каналов.
IChannel[] сhannelObjs = ChannelServices.RegisteredChannels;
foreach (IChannel i in channelObjs) {
Console.WriteLine("Имя канала: {0}", i.ChannelName);
Console.WriteLine("Приоритет: {0}", i.ChannelPriority);
}
то в окне консоли клиента вы увидите вывод, подобный показанному на рис. 18.4.
Рис. 18.4. Список каналов в окне клиента
Тип RemotingConfiguration
Другим ключевым типом удаленного взаимодействия является тип RemotingConfiguration, который, в соответствии со своим названием, используется для настройки различных параметров приложения удаленного взаимодействия. Вы уже видели этот тип в работе на стороне сервера (при вызове метода RegisterWellKnownServiceType()). Другие заслуживающие внимания статические члены этого типа описываются в табл. 18.5, а возможности применения некоторых из этих членов будут продемонстрированы в оставшейся части этой главы.
Таблица 18.5.Члены типа RemotingConfiguration
Член |
Описание |
ApplicationId |
Возвращает идентификатор приложения, выполняющегося в настоящий момент |
ApplicationName |
Возвращает или устанавливает имя приложения удаленного взаимодействия |
ProcessId |
Возвращает идентификатор процесса, выполняющегося в настоящий момент |
Configure() |
Читает файл конфигурации и устанавливает параметры конфигурации инфраструктуры удаленного взаимодействия |
GetRegisteredActivatedClientTypes() |
Возвращает массив объектных типов, зарегистрированных на стороне клиента для удаленной активизации |
GetRegisteredActivatedServiceTypes() |
Возвращает массив объектных типов, зарегистрированных на стороне сервиса для активизации по запросу клиента |
GetRegisteredWellKnownClientTypes() |
Возвращает массив объектных типов, зарегистрированных на стороне клиента в качестве WKO-типов |
GetRegisteredWellKnownServiceTypes() |
Возвращает массив объектных типов, зарегистрированных на стороне сервиса в качестве WKO-типов |
IsWellKnownClientType() |
Проверяет, является ли указанный объектный тип зарегистрированным WKO-типом клиента |
RegisterActivatedClientType() |
Регистрирует объект на стороне клиента как тип, позволяющий активизацию на сервере |
RegisterWellKnownClientType() |
Регистрирует объект на стороне клиента как WKO-тип (синглет или объект одиночного вызова) |
RegisterWellKnownServiceType() |
Регистрирует объект на стороне сервиса как WKO-тип (синглет или объект одиночного вызова) |
Напомним, что слой удаленного взаимодействия .NET различает два вида MBR-объектов: WKO (активизируются сервером) и САО (активизируются клиентом). К тому же, WKO-тип может быть активизирован либо как синглет, либо как объект одиночного вызова. Используя функциональные возможности типа RemotingConfiguration, вы можете динамически получить такую информацию в среде выполнения. Например, если добавить в метод Main() приложения SimpleRemoteObjectServer следующие строки программного кода:
static void Main(string[] args) {
…
// Установка понятного имени для данного приложения сервера.
RemotingConfiguration.ApplicationName = "Первое серверное приложение";
Console.WriteLine("Имя приложения: {0}", RemotingConfiguration.ApplicationName);
// Получение массива типов WellKnownServiceTypeEntry,
// представляющих зарегистрированные WKO-объекты.
WellKnownServiceTypeEntry[] WKOs = RemotingConfiguration.GetRegisteredWellKnownServiceTypes();
// Вывод информации.
foreach(WellKnownServiceTypeEntry wko in WKOs) {
Console.WriteLine("Имя блока, содержащего WKO: {0}", wko.AssemblyName);
Console.WriteLine("URL данного WKO: {0}", wko.ObjectUri);
Console.WriteLine("Тип WKO: {0}", wko.ObjectType);
Console.WriteLine("Режим активизации WKO: {0}", wko.Mоde);
}
}
то вы должны увидеть список всех WKO-типов, зарегистрированных доменом приложения сервера. Выполнив цикл по всем элементам массива типов WellKnownServiceTypeEntry, можно выяснить характеристики каждого из WKO-объектов. Поскольку ваше серверное приложение регистрирует только один тип (SimpleRemotingAsm.RemoteMessageObject), вы получите вывод, показанный на рис. 18.5.
Рис. 18.5. Статистика сервера
Читать дальше