среда, 18 мая 2011 г.

.NET Remoting. Каналы связи.

        Для того, чтобы Remoting-объекты взаимодействовали между собой, они должны обмениваться сообщениями друг с другом. Обмен сообщениями происходит через каналы связи. Каналы связи могут настраиваться как на приём, отправку, так и на приём и отправку одновременно.

        В .NET Remoting существует 3 типа каналов связи:
  • http канал;
  • tcp канал;
  • ipc канал.
        Также, при необходимости, существует возможность написать свой канал.
        Для использования каналов связи в .NET Remoting необходимо подключать пространство имён System.Runtime.Remoting.Channels. Кроме того, должно быть видимо пространство имён System.Runtime.Remoting.
        Для того, чтобы каналы связи работали, нужно обязательно добавить ссылку в проект на System.Runtime.Remoting.
        Рассмотрим более подробно каждый канал.

        HTTP канал


        HTTP канал используется, когда необходима максимальная открытость. По умолчанию в данном канале для передачи сообщений используется протокол SOAP. Он применяет XML-сериализатор для пересылки сообщений между Remoting-объектами.
        Преимущество использования этого канала состоит в том, что через него можно передавать сообщения сквозь брандмауэр через открытые порты. Для использования HTTP канала необходимо подключать пространство имён System.Runtime.Remoting.Channels.Http.

        TCP канал


        TCP канал используется, когда необходима максимальная эффективность передачи данных. По умолчанию в данном канале используется двоичный форматирующий объект для передачи данных между Remoting-объектами. В этом случае сообщения сериализуются в двоичный поток и передаются по сети с помощью обычных сокетов.
        Преимущество использования этого канала состоит в том, что с помощью него достигается максимальная скорость передачи данных между Remoting-объектами. Для использования TCP канала необходимо подключать пространство имён System.Runtime.Remoting.Channels.Tcp.

        IPC канал


        IPC канал используется для связи между процессами в рамках одной машины. Этот канал применяет частные протоколы Windows, проэтому обеспечивает большую производительность, чем HTTP и TCP.
        Для использования IPC канала необходимо подключать пространство имён System.Runtime.Remoting.Channels.Ipc.


        Регистрация канала в приложении


        Для того, чтобы канал работал, его необходимо зарегестрировать в сервисе каналов с помощью метода RegisterChannel класса ChannelServices. Приложение может регистрировать несколько каналов, на на 1 порт можно регистрировать только 1 канал. Имя каждого канала должно быть уникальным. Приведём пример регистрации канала в приложении:


using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels.Ipc;


class Server
{
        public static void Main(string[] args)
        {
                // Регистрируем HTTP канал
                HttpChannel hchannel = new HttpChannel(1500);
                ChannelServices.RegisterChannel(hchannel);


                // Регистрируем TCP канал
                TcpChannel tchannel = new TcpChannel(1501);
                ChannelServices.RegisterChannel(tchannel);


                // Регистрируем IPC канал
                IpcChannel ichannel = new IpcChannel(1502);
                ChannelServices.RegisterChannel(ichannel);
        }
}


        Как видно в примере, мы регистрируем 3 канала связи, каждый из которых имеет свой уникальный порт. Назначение номеров портов для каналов обязательно для приложения сервера. Для приложения клиента можно не задавать номер порта для канала HTTP, так как к нему никто не обращается.

        HttpChannel hchannel = new HttpChannel();

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

Комментариев нет:

Отправить комментарий