ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Таблица 18.4. Подборка членов типа ChannelServices
Член | Описание |
---|---|
RegisteredChannels | Свойство, получающее или устанавливающее список зарегистрированных в настоящий момент каналов, каждый из которых представляется интерфейсом IChannel |
DispatchMessage | Метод, выполняющий обработку поступающих удаленных вызовов |
GetChannel | Метод, возвращающий зарегистрированный канал с указанным именем |
GetUrlsForObject | Метод, возвращающий массив адресов URL, которые могут использоваться для доступа к указанному
|
RegisterChannel | Метод, регистрирующий канал о соответствующими канальными сервисами |
UnregisterChannel | Метод, отменяющий регистрацию данного канала и удаляющий этот канал из списка зарегистрированных |
Определение интерфейса IChannel оказывается исключительно простым.
Как видите, каждый канал получает понятное строковое имя, а также свой уровень приоритета. Например, если добавить в метод Main приложения SimpleRemoteObjectClient следующую) программную логику
то в окне консоли клиента вы увидите вывод, подобный показанному на рис. 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 следующие строки программного кода:
то вы должны увидеть список всех WKO-типов, зарегистрированных доменом приложения сервера. Выполнив цикл по всем элементам массива типов WellKnownServiceTypeEntry, можно выяснить характеристики каждого из WKO-объектов. Поскольку ваше серверное приложение регистрирует только один тип (SimpleRemotingAsm.RemoteMessageObject), вы получите вывод, показанный на рис. 18.5.
Рис. 18.5. Статистика сервера
Другим важным методом типа RemotingConfiguration является метод Configure. Вскоре вы сможете убедиться, что этот статический член позволяет доменам приложений клиента и сервера использовать файлы конфигурации удаленного взаимодействия.
Снова о режиме активизации WKO-типов
Напомним, что WKO-типы можно настроить для работы либо в режиме синглета, либо в режиме объекта одиночного вызова. В настоящее время ваше серверное приложение регистрирует WKO-тип с использованием семантики активизации синглета.
Снова обратим внимание на то, что WKO-синглеты могут получать запросы от множества клиентов. Поэтому синглеты связаны с удаленными клиентами отношением "один ко множеству". Чтобы проверить это непосредственно, запустите приложение сервера (если оно в настоящий момент еще не выполняется) и три отдельных приложения клиента. Если посмотреть на вывод сервера, вы обнаружите там только один вызов заданного по умолчанию конструктора RemoteMessageObject.
Чтобы рассмотреть поведение объектов одиночного вызова, измените серверное приложение так, чтобы в нем регистрировался WKO-объект, поддерживающий активизацию одиночного вызова.