Создание COM-компонент "среднего слоя" в среде Microsoft Visual FoxPro

Содержание

Слайд 2

Содержание

Возможности VFP в создании приложений по обработке данных
Функциональные возможности уровня VFP-базы данных
Схема

Содержание Возможности VFP в создании приложений по обработке данных Функциональные возможности уровня
сетевого обмена данными в традиционном VFP-приложении
Многослойные архитектурные решения при создании приложений по обработке данных
Схема обращения клиента к серверной компоненте через RPC (Remote Procedure Call)
Схема обращения клиента к серверу через SOAP (Simple Object Access Protocol) протокол
Шаги создания COM-компоненты в среде VFP
Код примера-теста VFP-COM-компоненты
Интерфейсы созданной нами VFP-COM-компоненты
Шаги регистрации COM-компоненты в «Службе компонент» сервера
Создание COM+ приложения
Настройка прав доступа к COM+ приложению
Компоненты поддержки VFP-COM на стороне сервера
Регистрация VFP-COM-объекта в COM+ приложении
Проверка работы VFP-COM-объекта в рамках COM+ приложения
Экспорт VFP-COM-компонент приложения для установки на стороне клиентов
Публикация COM-компоненты как Web Services
Публикация с использованием WDSL Generator из SOAP 3.0 Toolkit
Завершение публикации и проверка работоспособности нашего Web Service
Перечень возможностей COM+ приложений, выполняющихся в «Службе компонент» сервера
Завершение COM+ приложения из VFP-кода
Настройки Активизации COM+ компоненты (Just-in-time activation)
Получение ObjectContext
Использование ObjectContext (явная схема)
Использование ObjectContext (неявная схема VFP 7.0 и выше)
Схема «работы» Stateless объекта
Некоторые сравнительные характеристики Statefull и Stateless объектов
Использование общих в рамках приложения данных
Пример кода, показывающего использование «Shared Property Manager» из «Службы Компонент»
Примеры кода, показывающего проверку роли клиента и контроль за флагами состояния в «Службе Компонент»
Пример функционального разбиения VFP-приложения в трёхслойной архитектуре
Список литературы

Слайд 3

Возможности VFP в создании приложений по обработке данных

VFP имеет «свою базу данных»

Возможности VFP в создании приложений по обработке данных VFP имеет «свою базу
с поддержкой SQL и ODBC/OLEDB драйверов к ней, что позволяет «внешним приложениям» пользоваться данными из VFP-базы данных через стандартные интерфейсы, в частности, через ADODB… Также VFP-база данных доступна в среде программирования MS VS 2003 .NET (и выше). Доступ осуществляется с использование библиотеки MS Framework .NET (1.1 и выше).
Специализированный на обработку данных объектно-ориентированный язык программирования позволяет минимальными усилиями создавать прикладные задачи, связанные с обработкой данных.
VFP имеет также «объектную модель» визуальных объектов, включающую наследование и обеспечивающих создание «интерфейса пользователя» (т.е. клиентских приложений), причём все визуальные объекты легко интегрируются с источниками данных путём простого механизма присоединения к таблицам/полям данных.
Средства программирования в VFP позволяют создавать COM-компоненты, которые могут быть использованы как VFP-приложениями, так и «внешними приложениями», допускающими использование OLE Automation объектов. Кроме того, создаваемые VFP-COM-компоненты совместимы с MTS (OS NT 4), с «Службой Компонент» (OS NT 5), также как легко могут быть опубликованы как «Web Services» для работы из-под MS IIS 5.0 (и выше)

Слайд 4

Функциональные возможности уровня VFP-базы данных

Средствами VFP-базы данных вы можете:
хранить определения для соединений

Функциональные возможности уровня VFP-базы данных Средствами VFP-базы данных вы можете: хранить определения
с «внешними источниками» данных
создать часто используемые представления данных как к таблицам базы данных, так и к внешним источникам
реализовать «общие функции» обработки данных на «хранимых процедурах»
определить первичные ключи таблиц и установить постоянные межтабличные отношения
определить значения по умолчанию для полей (в последних версиях ключи с автоматическим приращением значений), а также маски ввода и формат отображения данных
осуществить контроль целостности данных
выполнить проверку корректности данных в полях и/или в записи
осуществить транзакционность изменений в нескольких таблицах
организовать «следственные изменения» в логически связанных таблицах
хранить описания полей/таблиц и «подвязанные» к полям классы, осуществляющие отображение данных на стороне клиента
в последних версиях программируемая событийная модель позволяет программировать «административный уровень» обслуживания базы данных
Нужно иметь ввиду и имеющуюся здесь ограничения (не все команды/функции VFP-среды поддержаны см. раздел “Unsupported Visual FoxPro Commands and Functions” в документации), в частности: не следует пытаться использовать классы (хотя формально ограничений вроде как нет) это сделает недоступным использованию VFP-базы данных через OLEDB

Слайд 5

Схема сетевого обмена данными в традиционном VFP-приложении

Если источником служит VFP-база данных, то

Схема сетевого обмена данными в традиционном VFP-приложении Если источником служит VFP-база данных,
сервер используется чисто как файл-сервер.
Выполнение кода происходит только и только на машинах клиентов…
… при этом, все требуемые для работы данные по сети доставляются каждому из клиентов.
Управление сетевым трафиком достаточно туманно… и скрыто во внутренних механизмах работы с данными среды VFP

Слайд 6

Многослойные архитектурные решения при создании приложений по обработке данных

Основное отличие

Многослойные архитектурные решения при создании приложений по обработке данных Основное отличие в
в том, что в двухслойной архитектуре любой клиент имеет «прямой доступ к базе данных», в то время как в трёхслойной – нет… И «доступ к данным осуществляется только и только через слой компонент» на сервере. Как следствие, управление сетевым трафиком полностью ложится на плечи разработчика.

Двухслойная архитектура:

Трёх и более слоёная архитектура:

Слайд 7

Схема обращения клиента к серверной компоненте через RPC (Remote Procedure Call)

Обращение клиента

Схема обращения клиента к серверной компоненте через RPC (Remote Procedure Call) Обращение
к серверу в локальной сети осуществляется через стандартизованный механизм удалённого вызова (RPC), который предполагает наличие посредников [заместителя (proxy) + заглушки (stub)], обеспечивающих вызов. На стороне клиента в качестве посредника используется Proxy, а на стороне севера Stub… Так что именно за ними скрыты все тонкости/детали организации собственно самого вызова.

Слайд 8

Схема обращения клиента к серверу через SOAP (Simple Object Access Protocol) протокол

SOAP

Схема обращения клиента к серверу через SOAP (Simple Object Access Protocol) протокол
отправитель

SOAP получатель

Для передачи SOAP сообщений может быть использован любой коммуникационный протокол

Пример использования SOAP через HTTP-протокол:

Запрос клиента к серверу (Request)

Ответ сервера клиенту (Response)

Структура SOAP сообщения

http://msdn.microsoft.com/webservices/building/soaptk/

Слайд 9

Шаги создания COM-компоненты в среде VFP

Чтобы создать VFP-COM-компоненту, нужно проделать следующее:
Создать новый

Шаги создания COM-компоненты в среде VFP Чтобы создать VFP-COM-компоненту, нужно проделать следующее:
VFP-проект:

Поместить в него код, показанный на следующем слайде… (вы можете создавать OLEPUBLIC классы как в PRG-файлах, так и в VCX, проект может содержать более чем один класс)
… и откомпилировать полученное.
Чтобы убедиться, что компонента работает, выполните из окна команд следующее:

Слайд 10

Код примера-теста VFP-COM-компоненты

Завершения по любой ошибке именно функцией COMRETURNERROR() см. Q187908 в

Код примера-теста VFP-COM-компоненты Завершения по любой ошибке именно функцией COMRETURNERROR() см. Q187908
MSDN

Именно Session (с DataSession=2) и OLEPUBLIC

Слайд 11

Интерфейсы созданной нами VFP-COM-компоненты

Обратите внимание: нет ничего лишнего…

Интерфейсы созданной нами VFP-COM-компоненты Обратите внимание: нет ничего лишнего…

Слайд 12

Шаги регистрации COM-компоненты в «Службе компонент» сервера (создание COM+ приложения)

Запуск «Службы компонент»

Создание

Шаги регистрации COM-компоненты в «Службе компонент» сервера (создание COM+ приложения) Запуск «Службы
нового «пустого» приложения

Запускаемого на сервере

Обратите внимание: для выполнения этих действий, вам потребуются права «локального администратора» этого сервера.

Слайд 13

Настройка прав доступа к COM+ приложению

Для обеспечения прав доступа к компонентам вашего

Настройка прав доступа к COM+ приложению Для обеспечения прав доступа к компонентам
COM+ приложения следует определить пользователя, от имени которого будет запускаться ваше приложение. Такой пользователь должен обладать неограниченными правами на файлы и ресурсы, используемые COM-компонентами приложения. На мой взгляд лучший вариант следующий:
Создать «локального пользователя», например: AppRuner и придать ему права «локального администратора».
Именно такого «локального пользователя» использовать в показанных ниже диалогах.

Введите здесь «локального пользователя», обладающего правами «локального администратора»

Переустановите здесь «локального пользователя», обладающего правами «локального администратора», если вы получили проблемы ограниченных прав

Слайд 14

Компоненты поддержки VFP-COM на стороне сервера

Прежде чем пытаться зарегистрировать вашу VFP-COM-компоненту, обратите

Компоненты поддержки VFP-COM на стороне сервера Прежде чем пытаться зарегистрировать вашу VFP-COM-компоненту,
внимание на то, что должно быть установлено на сервере:
Для успешной регистрации VFP-COM-компоненты на сервере, требуется установка следующих библиотек (см. в C:\Program Files\Common Files\Microsoft Shared\VFP\): vfpt.dll [,vfpr.dll], vfp renu.dll [,vfprrus.dll], [%windir%\system32\] GDIPlus.dll, MSVCR70.dll, здесь - номер версии
Если вы используете какие-либо дополнительные VFP-средства, то полный список файлов VFP-runtime можно найти на http://fox.wikis.com/ точнее, в зависимости от версий это:
в MSDN: Q190869 INFO: Visual FoxPro 6.0 Required Run-Time Files – VFP 6
http://fox.wikis.com/wc.dll?Wiki~VFP7RuntimeFiles~VFP – VFP 7
http://fox.wikis.com/wc.dll?Wiki~VFP8RuntimeFiles~VFP – VFP 8
http://fox.wikis.com/wc.dll?Wiki~VFP9RuntimeFiles~VFP – VFP 9
Если вы используете только VFP OLEDB, то установка VFP-runtime вообще говоря не требуется, однако необходимо установить vfpoledb.dll (см. в C:\Program Files\Common Files\System\Ole DB). Последнюю версию инсталляционного пакета можно скачать с http://msdn.microsoft.com/vfoxpro/downloads/updates/default.aspx
В VFP 9 появилась функция SYS(3101 [, nCodePage]) для установки требуемой «кодовой страницы», однако, если у вас установлены VFP-runtime версии младше 9, то здесь имеются проблемы (т.е. того, что возвращает функция CPCURRENT()), как исправить положение дел в зависимости от версий описано здесь:
http://vfpdev.narod.ru/docs/mtscom_r.html#cpsolve7 – для vfp6t.dll, vfp7t.dll, vfp8t.dll
http://vfpdev.narod.ru/docs/spcall_r.html#cpsolve – для vfpoledb.dll (8.0.0.3006, 8.0.0.3117)
Для создания пакета установки в VFP 6.0 можно воспользоваться помощником (меню: tools/wizards/setup), а в VFP 7-9 приложением InstallShield Express
Установки следует производить только обладая правами «локального администратора» сервера.

Слайд 15

Регистрация VFP-COM-объекта в COM+ приложении

Собственно сама регистрация созданной в VFP многопоточной COM

Регистрация VFP-COM-объекта в COM+ приложении Собственно сама регистрация созданной в VFP многопоточной
dll-ки тривиальна: достаточно из-под «Проводника Windows» зацепив мышкой «перетащить и отпустить» её в папку «Компоненты» нашего пока ещё пустого COM+ приложения с названием AppTestVfp.
На слайде ниже показан результат этого действия.
Обратите внимание на то: где именно на сервере расположена наша mytestvfpcom.dll, созданная как VFP-COM-компонента.

Слайд 16

Проверка работы VFP-COM-объекта в рамках COM+ приложения

Здесь слева приведён JavaScript-код обращения к

Проверка работы VFP-COM-объекта в рамках COM+ приложения Здесь слева приведён JavaScript-код обращения
нашей тестовой VFP-COM-компоненте.
Если этот код выполнить непосредственно на сервере, то при успешном создании экземпляра нашего объекта, в то время пока диалог показа результата ещё не закрыт, в окне «Службы компонент» мы можем наблюдать «активность» нашей тестовой компоненты:

Слайд 17

Экспорт VFP-COM-компонент приложения для установки на стороне клиентов

Наконец, последним шагом является получение

Экспорт VFP-COM-компонент приложения для установки на стороне клиентов Наконец, последним шагом является
инсталляционных файлов нашей VFP-COM-компоненты, чтобы установить последние на всех потенциальных клиентах.
Благодаря «Службе компонент» этот шаг существенно облегчён, однако предполагается, что:
На клиентах установлен как минимум Windows Installer 2.0
Также как и VFP-runtime, включая vfpt.dll
Также очевидно, что это шаг следует делать только в том случае, если вашими клиентами являются VFP (или другие) приложения, работающие в локальной сети через DCOM, в противном случае (при работе через SOAP и/или через HTTP) необходимость в этом шаге отпадает.

Слайд 18

Публикация COM-компоненты как Web Services с использованием WSDL Generator из SOAP Toolkit

Публикация COM-компоненты как Web Services с использованием WSDL Generator из SOAP Toolkit
3.0

Путь и файл не должны содержать русские буквы, только ANCI символы

Слайд 19

Завершение публикации и проверка работоспособности нашего Web Service

Завершение публикации и проверка работоспособности нашего Web Service

Слайд 20

Перечень возможностей COM+ приложений, выполняющихся в «Службе компонент» сервера

При работе COM-компонент на

Перечень возможностей COM+ приложений, выполняющихся в «Службе компонент» сервера При работе COM-компонент
стороне сервера возникает целая серия общих для этого случая задач, таких как: вынесение отдельных задач в отдельные потоки для увеличения производительности системы в целом, контроль доступа к объектам, и т.п.
COM-компонентами, работающими в раках «Службы компонент» предоставляется целая серия дополнительных возможностей, к ним в частности относятся:
активизация на время выполнения (just-in-time activation)
общие и совместно используемые наборы свойств (shared properties)
ролевая система безопасности (role-based security)
поддержка транзакционности изменений (transactions)
поддержка асинхронных очередей сообщений (queued components)
обеспечение пула готовых к немедленному выполнению объектов (object pooling)
и др.

Ниже мы рассмотрим лишь некоторые их них…

Слайд 21

Завершение COM+ приложения из VFP-кода

Код приведённый здесь и помещённый в событие BeforeBuild

Завершение COM+ приложения из VFP-кода Код приведённый здесь и помещённый в событие
класса ProjectHook, который вы должны подключить к вашему проекту, обеспечит вам автоматическое завершение COM+ приложения при перекомпиляции вашего проекта. Т.е. перед подменой прежней dll-библиотеки на новую. Это видимо первое, с чем вам придётся столкнуться на этом пути… Cм. [1] в «Списке литературы».

Слайд 22

Настройки Активизации COM+ компоненты (Just-in-time activation)

По умолчанию поддержка JIT активизации компоненты включена
Однако,

Настройки Активизации COM+ компоненты (Just-in-time activation) По умолчанию поддержка JIT активизации компоненты
она действительно необходима только в случае поддержки транзакций для ваших компонент

Слайд 23

Получение ObjectContext

Получение ObjectContext

Слайд 24

Использование ObjectContext (явная схема)

Использование ObjectContext (явная схема)

Слайд 25

Использование ObjectContext (неявная схема VFP 7.0 и выше)

Использование ObjectContext (неявная схема VFP 7.0 и выше)

Слайд 26

Схема «работы» Stateless объекта

См. [3] в «Списке литературы».

Схема «работы» Stateless объекта См. [3] в «Списке литературы».

Слайд 27

Некоторые сравнительные характеристики Statefull и Stateless объектов

COM+ допускает использование как одного таки

Некоторые сравнительные характеристики Statefull и Stateless объектов COM+ допускает использование как одного таки и другого вариантов.
и другого вариантов.

Слайд 28

Использование общих в рамках приложения данных

В многопоточном варианте использования компонент (multi-threaded dll)

Использование общих в рамках приложения данных В многопоточном варианте использования компонент (multi-threaded
существует проблема доступа к общим ресурсам для компонент выполняющихся в разных потоках одного и того же процесса. Чтобы в этих условиях обеспечить корректность данных (не потерять изменения и не получать непредсказуемые значения), в VFP реализовано ряд решений:
Чтобы «инкапсулировать» работу с таблицами данных в рамках экземпляра класса, в качестве базового следует использовать класс Session с DataSession=2 (см. в MSDN Q193953 PRB: COM.Dll In MTS 'Sharing' Data sessions Between Instances)
Относительно использования глобальных переменных в нужно иметь ввиду следующее:
во-первых, - для глобальных переменных в каждом потоке VFP образует собственный apartment, где содержит локальную копию данных (thread-local storage). Другими словами переменные, объявленные как PUBLIC, в действительности глобальны только по отношению к потоку.
во-вторых, - участки соответствующего кода можно поместить в критические секции, применяя VFP-функцию SYS(2336 [, nAction])
наконец, - можно использовать «Share Properties Manager» «Службы компонент», где применены semaphores и locks в этих целях.

Слайд 29

Пример кода, показывающего использование «Shared Property Manager» из «Службы Компонент»

См. [1] в

Пример кода, показывающего использование «Shared Property Manager» из «Службы Компонент» См. [1] в «Списке литературы».
«Списке литературы».

Слайд 30

Примеры кода, показывающего проверку роли клиента и контроль за флагами состояния в

Примеры кода, показывающего проверку роли клиента и контроль за флагами состояния в
«Службе Компонент»

Пример кода в VFP 7.0 и выше показывающий использование интерфейса IContextState из comsvcs.dll для контроля за флагами состояния (consistent flag and a done flag) в COM+ приложении в случае использования поддержки транзакций:

Пример кода, показывающего проверку роли клиента в COM+ приложении в случае использования ролевой системы безопасности:

Чтобы дополнительные возможности на уровне компонент были поддержаны, необходима соответствующая настройка в окне свойств компоненты в «Службе компонент».

Слайд 31

Пример функционального разбиения VFP-приложения в трёхслойной архитектуре

Пример функционального разбиения VFP-приложения в трёхслойной архитектуре
Имя файла: Создание-COM-компонент-"среднего-слоя"-в-среде-Microsoft-Visual-FoxPro.pptx
Количество просмотров: 200
Количество скачиваний: 0