C# для профессионалов. Том II
Шрифт:
<channels>
<channel type = "System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting" port="6791" />
<channel type = "System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting" port="6792" />
</channels>
Конфигурация сервера для хорошо известных объектов
Этот пример файла
wellknown.config
имеет значение Hello
для свойства Name
. Мы используем канал TCP для прослушивания порта 6791, а канал HTTP для прослушивания порта 6792. Класс удаленного объекта —Wrox.ProfessionalCSharp.Hello
RemoteHello.dll
, объект в канале называется Hi
, и используется режим SingleCall
: <configuration>
<system.runtime.remoting>
<application name="Hello">
<service>
<wellknown mode="SingleCall" type="Wrox.ProfessionalCSharp.Hello, RemoteHello" objectUri ="Hi" />
</service>
<channels>
<channel type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting" port="6791" />
<channel type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting" port="6792" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
Конфигурация клиента для хорошо известных объектов
Для хорошо известных объектов в клиентском конфигурационном файле
wellknown.config
необходимо определить сборку и канал. Типы для удаленного объекта можно найти в сборке RemoteHello.dll
, Hi
является именем объекта в канале, a URI для удаленного типа Wrox.ProfessionalCSharp.Hello
— это tcp://localhost:6791/Hi
. На клиенте также работает канал TCP, но на клиенте не определяется порт, поэтому выбирается свободный порт. <configuration>
<system.runtime.remoting>
<application name="Client">
<client url="tcp:/localhost:6791/Hello">
<wellknown type = "Wrox.ProfessionalCSharp.Hello, RemoteHello" url="tcp://localhost:6791/Hello/Hi" />
</client>
<channels>
<channel type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
Внесем небольшое изменение в конфигурационный файл и можем использовать канал HTTP (как видно в
wellknownhttp.config
): <client url="http://localhost:6792/Hello">
<wellknown type="Wrox.ProfessionalCSharp.Hello, RemoteHello" url="http://localhost:6792/Hello/Hi" />
</client>
<channels>
<channel type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting" />
</channels>
Серверная конфигурация для активизированных клиентом объектов
Преобразуя только конфигурационный файл (который находится в
clientactivated.config
), можно изменить сервер с активизированных
сервером объектов на активизированные клиентом объекты. Здесь определяется подэлемент <activated>
элемента <service>
. С его помощью для серверной конфигурации должен быть определен атрибут type
. Атрибут name
элемента application
определяет URI: <configuration>
<system.runtime.remoting>
<application name="HelloServer">
<service>
<activated type="Wrox.ProfessionalCSharp.Hello, RemoteHello" />
</service>
<channels>
<channel type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting" ports="6788" />
<channel type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting" ports="6789" /»
</channels>
</application>
</system.runtime.remoting>
</configuration>
Клиентская конфигурация для активизированных клиентом объектов
Файл
clientactivated.config
определяет активированный клиентом удаленный объект с помощью атрибута url
элемента <client>
и атрибута type
элемента <activated>
: <configuration>
<system.runtime.remoting>
<application>
<client url="http://localhost:6788/HelloServer" >
<activated type="Wrox.ProfessionalCSharp.Hello, RemoteHello" />
</client>
<channels>
<channel type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting" />
<channel type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
Серверный код, использующий конфигурационные файлы
В серверном коде необходимо сконфигурировать удаленное использование статического метода
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;
}
Поделиться с друзьями: