Чтение онлайн

ЖАНРЫ

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;

}

Поделиться с друзьями: