Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 428
Эндрю Троелсен
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. Статистика сервера
Другим важным методом типа RemotingConfiguration является метод Configure(). Вскоре вы сможете убедиться, что этот статический член позволяет доменам приложений клиента и сервера использовать файлы конфигурации удаленного взаимодействия.
Снова о режиме активизации WKO-типов
Напомним, что WKO-типы можно настроить для работы либо в режиме синглета, либо в режиме объекта одиночного вызова. В настоящее время ваше серверное приложение регистрирует WKO-тип с использованием семантики активизации синглета.
// Синглеты могут обслуживать множество клиентов.
RemotingConfiguration.RegisterWellKnownServiceType(typeof(SimpleRemotingAsm.RemoteMessageObject), "RemoteMsgObj.soap", WellKnownObjectMode.Singleton);
Снова обратим внимание на то, что WKO-синглеты могут получать запросы от множества клиентов. Поэтому синглеты связаны с удаленными клиентами отношением "один ко множеству". Чтобы проверить это непосредственно, запустите приложение сервера (если оно в настоящий момент еще не выполняется) и три отдельных приложения клиента. Если посмотреть на вывод сервера, вы обнаружите там только один вызов заданного по умолчанию конструктора RemoteMessageObject.
Чтобы рассмотреть поведение объектов одиночного вызова, измените серверное приложение так, чтобы в нем регистрировался WKO-объект, поддерживающий активизацию одиночного вызова.
// WKO-типы одиночного вызова связаны с клиентом
// отношением "один к одному".
RemotingConfiguration.RegisterWellKnownServiceType(typeof(SimpleRemotingAsm.RemoteMessageObject), "RemoteMsgObj.soap", WellKnownObjectMode.SingleCall)