Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

Классы

HttpChannel
и
TcpChannel
используются как для клиентов, так и для серверов. Они реализуют
IChannelSender
и
IChannelReceiver
. Эти интерфейсы являются производными из
IChannel
.

IChannelSender
клиентской стороны имеет в дополнение в
IChannel
единственный метод, называемый
CreateMessageSink
, который возвращает объект, реализующий
IMessageSink
. Интерфейс
IMessageSink
применяется для размещения синхронных, а также асинхронных сообщений в канале. С помощью интерфейса серверной стороны
IChannelReceiver
канал можно перевести в режим прослушивания с помощью метода
StartListening
и снова остановить с помощью метода
StopListening
. Также имеется свойство для доступа к полученным данным.

Информацию о конфигурации обоих каналов получают с помощью свойств классов каналов

ChannelName
,
ChannelPriority
и
ChannelData
. С помощью свойства
ChannelData
получают информацию об URI, который хранится в классе
ChannelDataStore
. В классе
HttpChannel
имеется также свойство
Scheme
. Ниже представлен вспомогательный метод
ShowChannelProperties
, демонстрирующий эти данные.

protected static void ShowChannelProperties(IChannelReceiver channel) {

 Console.WriteLine("Name; " + channel.ChannelName");

 Console.WriteLine("Priority: " + channel.ChannelPriority);

 if (channel is HttpChannel) {

HttpChannel httpChannel = channel as HttpChannel;

Console.WriteLine("Scheme: " + httpChannel.ChannelScheme);

 }

 ChannelDataStore data = (ChannelDataStore)channel.ChannelData;

 foreach (string uri in data.ChannelUris) {

Console.WriteLine("URI: " + uri);

 }

 Console.WriteLine;

}

После создания каналов вызывается метод

ShowChannelProperties
:

TcpServerChannel tcpChannel = new TcpServerChannel(8086);

ShowChannelProperties(tcpChannel);

HttpServerChannel httpChannel = new HttpServerChannel(8085);

ShowChannelProperties(httpChannel);

С помощью каналов TCP и HTTP будет получена следующая информация:

Как можно видеть, именем по умолчанию для

TcpServerChannel
будет
tcp
, а канал HTTP называется
http
. Оба канала имеют свойство по умолчанию, равное 1 (в конструкторах заданы порты 8085 и 8086). URI каналов показывает протокол, имя хоста (в данном случае
CNagel
) и номер порта.

Задание свойств канала

Можно задать все свойства канала в списке с помощью конструктора

TcpServerChannel(IDictionary, IServerChannelSinkProvider)
. Класс
ListDictionary
реализует
IDictionary
, поэтому свойства
Name
,
Priority
и
Port
задаются с помощью этого класса.

Для использования класса

ListDictionary
необходимо объявить использование пространства имен
System.Collections.Specialized
. В дополнение к параметру
IDictionary
передается параметр
IServerChannelSinkProvider
, в данном случае
SoapServerFormatterSinkProvider
вместо
BinaryServerFormatterSinkProvider
, который используется по умолчанию для
TCPServerChannel
. Реализация по умолчанию класса
SoapServerFormatterSinkProvider
ассоциирует класс
SoapServerFormatterSink
с каналом, применяющим
SoapFormatter
для преобразования данных передачи:

ListDictionary properties = new ListDictionary;

properties.Add("Name", "TCP Channel with a SOAP Formatter");

properties.Add("Priority", "20");

properties.Add("Port", "8086");

SoapServerFormatterSinkProvider sinkProvider =

 new SoapServerFormatterSinkProvider;

TcpServerChannel tcpChannel =

 new TcpServerChannel(properties.sinkProvider);

ShowChannelProperties(tcpChannel);

Вывод, который будет получен из запускаемого на сервере кода, показывает новые свойства канала TCP:

Подключаемость канала

Можно создать специальный канал для отправки сообщений с помощью транспортного протокола, отличного от HTTP или TCP, или расширить существующие каналы:

□ Посылающая часть должна реализовать интерфейс

IChannelSender
. Наиболее важным является метод
CreateMessageSink
, где клиент посылает URL, с помощью него создается экземпляр соединения с сервером. Здесь должен быть создан приемник сообщений, затем он используется прокси для отправки сообщений в канал.

  • Читать дальше
  • 1
  • ...
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: