Применений функций Net в коде Win32
Неуправляемый экспорт
Среда CLR позволяет предоставить статические методы DotNet неуправлямому коду Win32.
Для среды DotNet всякий кода Win32 называется неуправляемым, хотя неочевидно, что там будут указатели. Иногда это называют неуправляемым экспортом Unmanaged Export. Неуправляемый экспорт реализован с помощью механизма Invert Pain Work. По сути приложение Win32 способно импортировать эти функции также как и другие функции из обычных dll. Тем не менее не все языки могут это делать. В Delphi всё ограничивается экспортом глобальных функций, которые реализованы фактически как статические методы.
Примечание: глобальные функции объявлены в Interface, а не в Implementation.
Net Remote
Протокол обмена бинарными сообщеньями предоставляемой средой DotNet это по существу замена COM, DCOM. Т.е. Net Remote – это другое название DCOM только для среды DotNet.
В отличие от DCOM эта среда имеет архитектуру чрезвычайно гибкую и позволяет предоставлять большие возможности для настройки.
Так называемые домены приложения APP Domain является основой инфраструктуры дистанционного доступа и для межпроцессорного взаимодействия. По сути, они выполняют функции те же, что и Win32, но декларируется, что уровень разделения, уровень защиты и т.п. гораздо выше, чем у Win32. в одном процессе можно создать несколько доменов приложения с одним уровнем изоляции без дополнительных затрат на межпроцессорные обращения. Технология DotNet Remote позволяет обращаться объектам одного домена к объектам другого домена (аналог – апартаменты) независимо от нахождения (в каком домене находится и в каком процессе выполняется).
Объекты дистанционного доступа
Объекты, предполагающие обращение к разным доменам, называются объектами дистанционного доступа. Среда DotNet предоставляет 2 типа таких объектов:
• маршалинга по ссылки Marshal by References
• маршалинга по значению Marshal by Value
Формально существует третий связанный с контекстом, но он сложный и его мало кто использует.
Объекты маршалинга по ссылки
Экземпляры объектов этого типа можно рассматривать как коллекцию методов, доступных для вызова удаленных клиентов. Создаются они на сервере, параметры должны быть, как правило, простыми типами, в крайнем случаи объектным типом.
Маршалинг по значению
После сериализации (от serial – последовательный ) в транспортный формат экземпляры объектов этого типа способны пересекать границы доменов. Для того, чтобы использовать такой способ, надо использовать атрибут
[serialize]<имя класса>
Сериализация – процесс преобразования классов в поток байтов, который можно хранить, передавать и т.п. с одного компьютера на другой.
Активизация объектов
Существует 2 способа создания экземпляров объектов дистанционного доступа:
• активизация сервера;
• активизация клиента.
Активизация сервера
Объекты сервера, называемые общеизвестными (т.к. они регистрируются в среда дистанционного доступа DotNet). При одноэлементной активации Singleton Activation подразумевается создание только одного экземпляра, который будет доступен в любой момент времени. Если ссылку запросят 2 клиента, то оба получат одну и ту же ссылку, но обращение будет последовательным. Под реактивизации с одиночным обращение Single Call Instantiation получается более масштабируемый способ активации.
Активизация клиента
Объект активизации клиента индивидуальный для каждого клиента. Каждый клиент имеет свою собственную ссылку, которая может оставаться активной между обращениями к методам. Хотя клиентская активация предоставляет некоторые преимущества и проще в применении (исторически появилась раньше, пример: клиент базы данных), но масштабируемость этого способа хуже, необходимо больше ресурсов на сервере.
Примечание: Для активации клиента надо заранее знать сколько примерно будет подключений к серверу (чтобы выбрать сервер с нужным объёмом ресурсов), а теперь от этого ушли с помощью серверной активации (надо только реализовать пул объектов).
Резервирование
Нет счетчика ссылок, есть дистанционный объект. Возникают проблемы его продолжительности жизни. Проблемы управления продолжительностью жизни дистанционного объекта осуществляются на основе резервирования. Каждый домен обладает своим собственным диспетчером резервирования, который отслеживает все обращения к объекту. Если объект некоторое время не востребован, то мы его отдаем сборщику мусора. Это проще, чем DCOM, где используется счетчик ссылок по сети, которым сложно управлять.
Proxy Server
Естественно, что клиенты связываются с дистанционным объектом с помощью Proxy Server или просто Proxy, которая так же как и ранее является объектами расположенными в адресном пространстве клиента и которая также как и ранее выступает в роли заместителя и заглушки. В DotNet существует 2 типа Proxy Server:
• Сквозной Transparent
• Реальный Real
Для обращению к сквозному надо написать Activate.GetObject
Каналы
Канал дистанционного доступа Remote Channel неодходим для передачи сообщений между доменами приложений.
Можно использовать 2 типа каналов:
• TCP/IP, если возможна высокая скорость передачи;
• HTTP для Интернета.
Оба канала применяются независимо от формата обмена сообщениями. Т.е. можно использовать как формат caap (по умолчанию), так и бинарный(эффективный).
Разработка приложений по технологии Net Remote, т.е. дистанционного доступа, в Delphi относительно проста, по сути, она похожа на разработку OLE сервера. Регистрация проходит проще библиотека типов чего-то там не приводиться.