Краткий обзор удаленного доступа
Ниже перечислены ключевые части удаленного доступа:
- перехват, с помощью которого генерируются сообщения для связи по каналам;
- форматеры (Formatters), служащие для помещения сообщения в байтовый поток, который посылается по каналу. Это те же самые форматеры, которые обсуждались ранее в разделе, посвященном сериализации (преобразованию в последовательную форму),
- каналы связи для транспортировки (передачи) сообщений.
Перехват
Заместители и заглушки (называемые в NET диспетчерами, организующими программами и планировщиками) преобразовывают обращение к функции на клиентской или серверной стороне в сообщения, которые посылаются по сети. Такой процесс называется перехватом, потому что заместители и диспетчеры перехватывают вызов метода для посылки его удаленному адресату. В отличие от модели компонентных объектов Microsoft (COM), общеязыковая среда времени выполнения CLR может генерировать заместители и заглушки с помощью информации, хранимой в метаданных.
Заместитель убирает вызов функции из стекового фрейма вызывающей программы и преобразовывает его в сообщение. Потом сообщение посылается адресату. Диспетчер принимает сообщение и помещает его в стековый фрейм так, чтобы запрос мог быть адресован соответствующему объекту.
Например, предположим, что метод UnregisterCustomer из сборки Customer (Клиент) выполняется в одной прикладной области и вызывается из другой. Нет никакой разницы, если прикладные области находятся в том же самом процессе или на той же самой машине.
Заместитель принимает целочисленный параметр id (идентификатор) из стекового фрейма клиента, который делает вызов и помещает его в сообщение, кодирующее запрос и его параметр. На серверной стороне диспетчер принимает это сообщение и помещает обращение к функции в стек сервера для вызова UnregisterCustomer (int id), a также преобразует этот вызов объекта. Коды клиента и сервера могут даже не знать, что они удалены друг от друга.
Каналы и форматеры
Форматер преобразовывает сообщение в поток байтов. Каркас .NET Framework поставляется с двумя форматерами, двоичным и SOAP (использующим XML-документы и рассматриваемым в главе 11 "Web-службы"). Поток байтов затем посылается по каналу связи.
Каркас .NET Framework поставляется также с двумя каналами, хотя можно создать и свой собственный. Канал HTTP, использующий протокол передачи гипертекстовых файлов HTTP хорош для соединения по Internet или через брандмауэры. Канал TCP использует протокол управления передачей TCP (сокеты) и предназначен для высокоскоростной связи.
Таким образом, имеются четыре возможных перестановки форматеров и каналов транспортировки: двоичный по протоколу управления передачей TCP, двоичный по протоколу передачи гипертекстовых файлов HTTP, SOAP по протоколу управления передачей TCP и SOAP по протоколу передачи гипертекстовых файлов HTTP.