}

Конфигурация служб времени жизни также задается с помощью конфигурационного файла.

Конфигурационные файлы

Вместо записи конфигурации канала и объекта в исходном коде, можно использовать конфигурационные файлы. Таким способом реконфигурируют канал, добавляют дополнительные каналы и т.д., не изменяя исходный код. Для этого, как и для всех других конфигурационных файлов на платформе .NET. используется XML на основе тех же самых приложений, о которых было написано в главе 10. В те же самые файлы в главе 25 будет добавлена конфигурация системы безопасности. В .NET Remoting имеются атрибуты и элементы XML для конфигурирования канала и удаленных объектов. Файл должен иметь то же самое имя, что и исполнимый файл, за которым следует .config. Для сервера HelloServer.exe конфигурационным файлом будет HelloServer.exe.config. В коде, загружаемом с web-сайта издательства Wrox, можно найти примеры конфигурационных файлов в корневом каталоге примеров с именами clientactivated.config, wellknown.config и wellknownhttp.config. Чтобы воспользоваться ими, переименуйте их, как показано выше, и поместите в каталог, содержащий исполнимый файл.

Вот только один пример, как мог бы выглядеть такой файл. Мы рассмотрим все различные конфигурационные параметры:

<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>

<configuration> является корневым элементом XML для всех конфигурационных файлов .NET. Все удаленные конфигурации можно найти в подэлементе <system.runtime.remoting>. <application> является подэлементом <system.runtime.remoting>.

Посмотрим на основные элементы и атрибуты в <system.runtime.remoting>:

□ В элементе <application> определяется имя приложения с помощью атрибута name. На серверной стороне это имя сервера, а на клиентской стороне — имя клиентского приложения. Пример серверной конфигурации <application name='Hellо'> определяет имя удаленного приложения Hello, которое используется клиентом как часть URL для доступа к удаленному объекту.

□ На сервере элемент <service> используется для определения совокупности удаленных объектов. Он может иметь подэлементы <wellknown> и <activated> вместе с определенным типом удаленного объекта — well known или client-activated.

□ Клиентской частью элемента <service> является <client>. Подобно элементу <service> он может иметь подэлементы <wellknown> и <activated> для определения типа удаленного объекта. В отличие от <service> элемент <client> имеет атрибут url для определения URL удаленного объекта.

□ <wellknown> является элементом, который используется на сервере и на клиенте для определения хорошо известных удаленных объектов. Серверная часть выглядит так:

<wellknown mode='SingleCall' type='Wrox.ProfessionalCSharp.Hello, RemoteHello' objectURI='Hi' />

□ В то время как атрибут mode может принимать значения SingleCall или Singleton, type является типом удаленного класса, включая пространство имен Wrox.ProfessionalCSharp.Hello, за которым следует имя сборки RemoteHello. Именем удаленного объекта является objectURI, который зарегистрирован в канале. На клиенте атрибут type является таким же, как и для серверной версии. mode и objectURI не нужны, вместо них используется атрибут url для определения пути доступа к удаленному объекту: протокол, имя хоста, номер порта, имя приложения и URI объекта:

<wellknown type='Wrox.ProfessionalCSharp.Hello, RemoteHello' url='tcp://localhost:6791/Hello/Hi' />

□ Элемент <activated> используется для активированных клиентом объектов. С помощью атрибута type должны быть определены тип данных и сборка как для клиентского, так и для серверного приложений:

<activated type='Wrox.ProfessionalCSharp.Hello, RemoteHello' />

□ Для определения канала, используется элемент <channel>. Это подэлемент <channels>, так что совокупность каналов можно сконфигурировать для одного приложения. Его использование аналогично для клиентов и серверов. Атрибут type используется для определения типа канала и сборки. Атрибут port является номером порта, который нужен только для серверной конфигурации:

<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>

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату