Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Использование ТСР-каналов
Использование ТСР-каналов
В настоящий момент ваш удаленный объект доступен через сетевой протокол HTTP. Как уже упоминалось выше, этот протокол вполне совместим с брандмауэром, но генерируемые при этом пакеты SOAP немного "раздуты" (по причине представления данных в формате XML). Чтобы уменьшить сетевой трафик, можно изменить компоновочные блоки клиента и сервера так, чтобы в них использовался TCP-канал и, следовательно, тип BinaryFormatter. Вот подходящая модификация компоновочного блока сервера.
Замечание. Для файлов с определениями объектов, доступных по TCP-каналам о заданным URI, чаще всего (но не обязательно) используется расширение *.rem (от remote – удаленный).
// Корректировки для сервера.
using System.Runtime.Remoting.Channels.Tcp;
…
static void Main(string[] args) {
…
// Создание нового TcpChannel
TcpChannel с = new TcpChannel(32469);
ChannelServises.RegisterChannel(c);
// Регистрация WKO-объекта в режиме синглета.
RemotingConfiguration.RegisterWellKnownServiceType(typeof(SimpleRemotingAsm.RemoteMessageObject), "RemoteMsgObj.rem", WellKnownObjectMode.SingleCall);
Console.ReadLine();
}
Здесь в слое удаленного взаимодействия .NET регистрируется тип System. Runtime.Remoting.Channels.Tcp.TcpChannel. Кроме того, изменен URI-объект (теперь для него задано более общее имя RemoteMsgObj.rem вместо *.soap, что явно указывало на использование SOAP). Модификация приложения клиента так же проста.
// Корректировки для клиента.
using System.Runtime.Remoting.Channels.Тcр;
…
static void Main(string[] args) {
…
// Создание нового TcpChannel
TcpChannel с = new TcpChannel();
ChannelServices.RegisterChannel(c);
// Получение агента для удаленного объекта.
object remoteObj = Activator.GetObject(typeof(SimpleRemotingAsm.RemoteMessageObject), "tcp://localhost:32469/RemoteMsgObj.rem");
// Использование объекта.
RemoteMessageObject simple = (RemoteMessageObject)remoteObj;
simple.DisplayMessage("Привет от клиента!");
Console.WriteLine("Сервер говорит: {0}", simple.ReturnMessage());
Console.ReadLine();
}
Единственным заслуживающим внимания моментом здесь является то, что URL активизации клиента теперь должен содержать признак канала tcp://, а не http://. Во всем остальном программная логика здесь оказывается идентичной программной логике HttpChannel,
Исходный код. Проекты TCPSimpleRemoteObjectServer и TCPSimpleRemoteObjectClient размещены в подкаталоге, соответствующем главе 18 (оба эти проекта используют созданный выше компоновочный блок SimpleRemotingAsm.dll).
- Понятие удаленного взаимодействия .NET
- Пространства имен удаленного взаимодействия .NET
- Каркас удаленного взаимодействия .NET
- Термины удаленного взаимодействия .NET
- Инсталляция приложения, использующего удаленное взаимодействие
- Создание распределенного приложения
- Тип ChannelServices
- Тип RemotingConfiguration
- Снова о режиме активизации WKO-типов
- Установка сервера на удаленной машине
- Использование ТСР-каналов
- Несколько слов о IpcChannel
- Файлы конфигурации удаленного взаимодействия
- Работа с MBV-объектами
- Объекты, активизируемые клиентом
- Схема лизингового управления циклом существования САО-типов и WKO-синглетов
- Спонсоры лизинга сервера (и клиента)
- Альтернативные хосты для удаленных объектов
- Асинхронное удаленное взаимодействие
- Резюме
- Регистрация ТСР
- Восстановление с использованием инструмента gbak
- Типы страниц и их использование
- Использование констант
- Использование переменной окружения ISC_PATH
- Использование сервера Yaffil внутри процесса
- Использование CAST() с типами дата
- Использование типов содержимого и столбцов
- Вызов хранимых процедур InterBase с использованием стандартного синтаксиса ODBC
- Использование кнопки Автосумма
- 24.7. Использование программы-твикера
- Использование отдельных процессоров XSLT