Серверный код, использующий конфигурационные файлы
В серверном коде необходимо сконфигурировать удаленное использование статического метода Configure()
из класса RemotingConfiguration
. Здесь создаются экземпляры всех определяемых каналов. Может быть мы захотим также узнать о конфигурациях каналов из серверного приложения. Поэтому созданы статические методы ShowActivatedServiceTypes()
и ShowWellKnovmServiceTypes()
, которые вызываются после загрузки и запуска удаленной конфигурации:
public static void Main(string[] args) {
RemotingConfiguration.Configure('HelloServer.exe.config');
Console.WriteLine(
'Application: ' + RemotingConfiguration.ApplicationName);
ShowActivatedServiceTypes();
ShowWellKnownServiceTypes();
System.Console.WriteLine('hit to exit');
System.Console.ReadLine();
return;
}
Эти две функции показывают данные конфигурации хорошо известных и активированных клиентом типов:
public static void ShowWellKnownServiceTypes() {
WellKnownServiceTypeEntry[] entries =
RemotingConfiguration.GetRegisteredWellKnownServiceTypes();
foreach (WellKnownServiceTypeEntry entry in entries) {
Console.WriteLine('Assembly: ' + entry.AssemblyName);
Console.WriteLine('Mode: ' + entry.Mode);
Console.WriteLine('URI ' + entry.ObjectUri);
Console.WriteLine('Type: ' + entry.TypeName);
}
}
public static void ShowActivatedServiceTypes() {
ActivatedServiceTypeEntry[] entries =
RemotingConfiguration.GetRegisteredActivatedServiceTypes();
foreach(ActivatedServiceTypeEntry entry in entries) {
Console.WriteLine('Assembly: ' + entry.AssemblyName);
Console.WriteLine('Type: ' + entry.TypeName);
}
}
Клиентский код, использующий конфигурационные файлы
В клиентском коде с помощью конфигурационного файла client.exe.config
нужно сконфигурировать только удаленные службы. После этого можно использовать оператор new для создания новых экземпляров класса Remote
независимо от того, происходит ли работа с активированными сервером или с активированными клиентов удаленными объектами. Но помните, что существует небольшая разница. Для активированных клиентом объектов теперь можно использовать произвольные конструкторы с помощью оператора new
. Это невозможно для активированных сервером объектов и не имеет смысла в этом случае: объекты SingleCall
не могут иметь состояния, так как они разрушаются вместе с каждым вызовом, объекты Singleton
создаются только однажды. Вызов произвольных конструкторов полезен только для активированных клиентом объектов, так как только для этого вида объектов оператор new реально вызывает конструктор удаленного объекта:
RemotingConfiguration.Configure('HelloClient.exe.config');
Hello obj = new Hello();
if (obj == null) {
Console.WriteLine('could not locate server');
return 0;
}
for (int i=0; i < 5; i++) {
Console.WriteLine(obj.Greeting('Christian'));
}
Службы времени жизни в конфигурационных файлах
Аренда конфигурации для удаленных серверов также может делаться с помощью конфигурационных файлов приложений. Элемент <lifetime>
имеет атрибуты leaseTime
, sponsorshipTimeOut
, renewOnCallTime
и pollTime
:
<configuration>
<system.runtime.remoting>
<application>
<lifetime leaseTime='15M' sponsorshipTimeOut='4M' renewOnCallTime='3M' pollTime='30s' />
</application>
</system.runtime.remoting>
</configuration>
Используя конфигурационные файлы, можно изменить удаленную конфигурацию, редактируя файлы вместо работы с исходным кодом. Легко изменить канал для использования HTTP вместо TCP, изменить порт, имя канала, и т. д. С помощью добавления одной строки сервер может слушать два канала вместо одного.
Инструменты для файлов удаленной конфигурации
Не обязательно начинать создавать конфигурационный файл XML для .NET Remoting с чистого листа. Для этого существует несколько инструментов:
□ При использовании версии .NET Remoting Beta 1 можно найти пример convertconfig.exe
в списке примеров Framework SDK. С помощью этого инструмента можно преобразовать использовавшийся ранее компактный формат файлов в новый формат на основе XML.
□ С помощью примера configfilegen.exe
можно создать конфигурационный файл из сборки. Запустите эту программу без параметров, чтобы увидеть все возможные конфигурации. Следующая командная строка создает активированный клиентом (-а) конфигурационный файл для сервера