Выбор канала
Этот раздел относится к технологии прежних версий, которая сохраняется для обеспечения обратной совместимости с существующими приложениями и не рекомендуется для разработки новых приложений. Сейчас распределенные приложения следует создавать с помощью Windows Communication Foundation (WCF).
Инфраструктура удаленного взаимодействия .NET Framework предоставляет реализации следующих каналов.
IpcChannel
Класс IpcChannel использует именованные каналы, чтобы обеспечить высокоскоростное межпроцессное взаимодействие для приложений, выполняющихся в нескольких процессах на одном компьютере. Объект типа IpcChannel:
обеспечивает взаимодействие между отправителем и получателем с помощью именованных каналов;
поддерживает кодирование данных в двоичный формат и формат сериализации SOAP, принятый в качестве отраслевого стандарта;
создает и использует ChannelDataStore для ссылок на объекты;
поддерживает олицетворение и делегирование;
поддерживает списки управления доступом (ACL) в именованном канале для расширенного управления доступом.
Объект IpcChannel следует использовать, когда приложение должно взаимодействовать с другим приложением, которое выполняется в другом процессе на том же компьютере. Поскольку объект IpcChannel использует именованные каналы, это обычно позволяет добиваться очень высокой производительности при передаче данных и использовать олицетворение и делегирование для управления доступом к удаленному объекту. Эта функция бывает особенно полезной между вторым и третьим уровнями трехуровневого приложения, которое должно выполняться под нагрузкой.
TcpChannel
Класс TcpChannel использует двоичный модуль форматирования для сериализации всех сообщений в двоичный поток и для передачи потока по целевому универсальному коду ресурса (URI) с помощью протокола TCP. Объект TcpChannel выполняет следующие функции:
обеспечивает взаимодействие между отправителем и получателем с помощью сокетов TCP;
поддерживает кодирование данных в двоичный формат и формат сериализации SOAP, принятый в качестве отраслевого стандарта;
создает и использует ChannelDataStore для ссылок на объекты;
поддерживает олицетворение и делегирование;
поддерживает шифрование SSPI.
Объект TcpChannel открывает и кэширует столько подключений, сколько имеется потоков, в настоящий момент создающих запросы к удаленному серверу. Подключения к сокету закрываются на стороне клиента через 15–20 секунд бездействия.
При построении нескольких приложений, использующих удаленное взаимодействие .NET Framework, легко по ошибке использовать объект HttpChannel для подключения к домену серверного приложения, которое ожидает передачи данных через канал TcpChannel. В этом случае клиент получает следующее исключение: "Базовое соединение закрыто: непредвиденная ошибка при приеме.". Если клиент получил это исключение, необходимо проверить клиент и сервер на наличие несоответствующих каналов.
HttpChannel
Объект HttpChannel передает сообщения удаленным объектам и обратно с помощью протокола SOAP. Все сообщения передаются через модуль SoapFormatter, где сообщение переводится в формат XML и сериализуется, а к потоку добавляются необходимые заголовки SOAP. Если также задан двоичный модуль форматирования, создается поток двоичных данных. После этого поток данных передается по целевому универсальному коду ресурса (URI) с помощью протокола HTTP. Класс HttpChannel совместим со стандартом SOAP 1.1 и выполняет следующие операции:
обеспечивает взаимодействие между отправителем и получателем, используя в качестве транспортного протокола HTTP;
поддерживает кодирование данных в формат SOAP, который является стандартом кодирования XML, а также в двоичный формат;
настраивает получатель для приема HTTP-запросов и отправки HTTP-ответов в ASP.NET и через сокет TCP;
создает и использует ChannelDataStore для ссылок на объекты;
поддерживает олицетворение и делегирование;
поддерживает шифрование SSPI.
Примечание |
---|
Чтобы использовать объект HttpChannel на клиенте с обозревателем Microsoft Internet Explorer, нельзя автоматически настроить параметры прокси-сервера в Internet Explorer. Вместо этого необходимо явным образом задать в Internet Explorer параметры прокси-сервера. |
Объект HttpChannel открывает только заданное количество одновременных подключений для заданного сервера. По умолчанию число подключений равно двум, но с помощью атрибута clientConnectionLimit в файле конфигурации приложения можно изменить значение по умолчанию.
При построении нескольких приложений, использующих удаленное взаимодействие .NET Framework легко по ошибке использовать объект HttpChannel для подключения к домену серверного приложения, которое ожидает передачи данных через канал TcpChannel. В этом случае клиент получает следующее исключение: "Базовое соединение закрыто: непредвиденная ошибка при приеме.". Если клиент получил это исключение, необходимо проверить клиент и сервер на наличие несоответствующих каналов.
См. также
Справочник
HttpChannel
TcpChannel
IpcChannel