· Шифрование данных. Необходимы канальные приемники для обработки потока данных на стороне клиента и сервера. На стороне клиента производится шифровка отсылаемого потока, на стороне сервера – расшифровка.
· Авторизация доступа. На стороне клиента канальный приемник добавляет в сообщение дополнительную информацию, идентифицирующую клиента (имя/пароль). На стороне сервера приемник извлекает данную информацию и в зависимости от ее содержания обрабатывает или отклоняет сообщение.
· Протоколирование сообщений. На стороне сервера канальный приемник заносит информацию об обработанных сообщениях в специальный файл или базу данных.
В .NET Framework канальные приемники описываются как классы, реализующие интерфейс IClientChannelSink (для клиента) или IServerChannelSink (для сервера). Канальные приемники соединены в цепочку (message sink chain). Каждый приемник хранит информацию о следующем элементе цепочки. Канальный приемник производит предварительную обработку сообщения, передает сообщение следующему приемнику в цепочке, после этого производится пост-обработка исходящего сообщения.
Установкой и настройкой канальных приемников занимаются специальные классы – провайдеры приемников. Это классы, реализующие интерфейс IClientChannelSinkProvider (для клиента) или IServerChannelSinkProvider (для сервера).
Созданные провайдеры подключаются к каналу при помощи конфигурационного файла[20]. Например, пусть имеется следующий конфигурационный файл (фрагмент):
<channels>
<channel ref="http">
<clientProviders>
<provider type="MySinks.MessageSinkProvider, Client" />
<formatter ref="soap" />