Михаил Дроздов Группа компаний ИВС, Пермь Создание COM-компонент "среднего слоя" в среде Microsoft Visual FoxPro
Содержание Возможности VFP в создании приложений по обработке данных Возможности VFP в создании приложений по обработке данных Функциональные возможности уровня VFP-базы данных Функциональные возможности уровня VFP-базы данных Схема сетевого обмена данными в традиционном VFP-приложении Схема сетевого обмена данными в традиционном VFP-приложении Многослойные архитектурные решения при создании приложений по обработке данных Многослойные архитектурные решения при создании приложений по обработке данных Схема обращения клиента к серверной компоненте через RPC (Remote Procedure Call) Схема обращения клиента к серверной компоненте через RPC (Remote Procedure Call) Схема обращения клиента к серверу через SOAP (Simple Object Access Protocol) протокол Схема обращения клиента к серверу через SOAP (Simple Object Access Protocol) протокол Шаги создания COM-компоненты в среде VFP Шаги создания COM-компоненты в среде VFP Код примера-теста VFP-COM-компоненты Код примера-теста VFP-COM-компоненты Интерфейсы созданной нами VFP-COM-компоненты Интерфейсы созданной нами VFP-COM-компоненты Шаги регистрации COM-компоненты в «Службе компонент» сервера Шаги регистрации COM-компоненты в «Службе компонент» сервера Создание COM+ приложения Создание COM+ приложения Настройка прав доступа к COM+ приложению Настройка прав доступа к COM+ приложению Компоненты поддержки VFP-COM на стороне сервера Компоненты поддержки VFP-COM на стороне сервера Регистрация VFP-COM-объекта в COM+ приложении Регистрация VFP-COM-объекта в COM+ приложении Проверка работы VFP-COM-объекта в рамках COM+ приложения Проверка работы VFP-COM-объекта в рамках COM+ приложения Экспорт VFP-COM-компонент приложения для установки на стороне клиентов Экспорт VFP-COM-компонент приложения для установки на стороне клиентов Публикация COM-компоненты как Web Services Публикация COM-компоненты как Web Services Публикация с использованием WDSL Generator из SOAP 3.0 Toolkit Публикация с использованием WDSL Generator из SOAP 3.0 Toolkit Завершение публикации и проверка работоспособности нашего Web Service Завершение публикации и проверка работоспособности нашего Web Service Перечень возможностей COM+ приложений, выполняющихся в «Службе компонент» сервера Перечень возможностей COM+ приложений, выполняющихся в «Службе компонент» сервера Завершение COM+ приложения из VFP-кода Завершение COM+ приложения из VFP-кода Настройки Активизации COM+ компоненты (Just-in-time activation) Настройки Активизации COM+ компоненты (Just-in-time activation) Получение ObjectContext Получение ObjectContext Использование ObjectContext (явная схема) Использование ObjectContext (явная схема) Использование ObjectContext (неявная схема VFP 7.0 и выше) Использование ObjectContext (неявная схема VFP 7.0 и выше) Схема «работы» Stateless объекта Схема «работы» Stateless объекта Некоторые сравнительные характеристики Statefull и Stateless объектов Некоторые сравнительные характеристики Statefull и Stateless объектов Использование общих в рамках приложения данных Использование общих в рамках приложения данных Пример кода, показывающего использование «Shared Property Manager» из «Службы Компонент» Пример кода, показывающего использование «Shared Property Manager» из «Службы Компонент» Примеры кода, показывающего проверку роли клиента и контроль за флагами состояния в «Службе Компонент» Примеры кода, показывающего проверку роли клиента и контроль за флагами состояния в «Службе Компонент» Пример функционального разбиения VFP-приложения в трёхслойной архитектуре Пример функционального разбиения VFP-приложения в трёхслойной архитектуре Список литературы Список литературы
Возможности VFP в создании приложений по обработке данных VFP имеет «свою базу данных» с поддержкой SQL и ODBC/OLEDB драйверов к ней, что позволяет «внешним приложениям» пользоваться данными из VFP-базы данных через стандартные интерфейсы, в частности, через ADODB… Также VFP-база данных доступна в среде программирования MS VS 2003.NET (и выше). Доступ осуществляется с использование библиотеки MS Framework.NET (1.1 и выше). VFP имеет «свою базу данных» с поддержкой SQL и ODBC/OLEDB драйверов к ней, что позволяет «внешним приложениям» пользоваться данными из VFP-базы данных через стандартные интерфейсы, в частности, через ADODB… Также VFP-база данных доступна в среде программирования MS VS 2003.NET (и выше). Доступ осуществляется с использование библиотеки MS Framework.NET (1.1 и выше). Специализированный на обработку данных объектно-ориентированный язык программирования позволяет минимальными усилиями создавать прикладные задачи, связанные с обработкой данных. Специализированный на обработку данных объектно-ориентированный язык программирования позволяет минимальными усилиями создавать прикладные задачи, связанные с обработкой данных. VFP имеет также «объектную модель» визуальных объектов, включающую наследование и обеспечивающих создание «интерфейса пользователя» (т.е. клиентских приложений), причём все визуальные объекты легко интегрируются с источниками данных путём простого механизма присоединения к таблицам/полям данных. VFP имеет также «объектную модель» визуальных объектов, включающую наследование и обеспечивающих создание «интерфейса пользователя» (т.е. клиентских приложений), причём все визуальные объекты легко интегрируются с источниками данных путём простого механизма присоединения к таблицам/полям данных. Средства программирования в VFP позволяют создавать COM- компоненты, которые могут быть использованы как VFP-приложениями, так и «внешними приложениями», допускающими использование OLE Automation объектов. Кроме того, создаваемые VFP-COM-компоненты совместимы с MTS (OS NT 4), с «Службой Компонент» (OS NT 5), также как легко могут быть опубликованы как «Web Services» для работы из- под MS IIS 5.0 (и выше) Средства программирования в VFP позволяют создавать COM- компоненты, которые могут быть использованы как VFP-приложениями, так и «внешними приложениями», допускающими использование OLE Automation объектов. Кроме того, создаваемые VFP-COM-компоненты совместимы с MTS (OS NT 4), с «Службой Компонент» (OS NT 5), также как легко могут быть опубликованы как «Web Services» для работы из- под MS IIS 5.0 (и выше)
Функциональные возможности уровня VFP-базы данных Средствами VFP-базы данных вы можете: Средствами VFP-базы данных вы можете: хранить определения для соединений с «внешними источниками» данных хранить определения для соединений с «внешними источниками» данных создать часто используемые представления данных как к таблицам базы данных, так и к внешним источникам создать часто используемые представления данных как к таблицам базы данных, так и к внешним источникам реализовать «общие функции» обработки данных на «хранимых процедурах» реализовать «общие функции» обработки данных на «хранимых процедурах» определить первичные ключи таблиц и установить постоянные межтабличные отношения определить первичные ключи таблиц и установить постоянные межтабличные отношения определить значения по умолчанию для полей (в последних версиях ключи с автоматическим приращением значений), а также маски ввода и формат отображения данных определить значения по умолчанию для полей (в последних версиях ключи с автоматическим приращением значений), а также маски ввода и формат отображения данных осуществить контроль целостности данных осуществить контроль целостности данных выполнить проверку корректности данных в полях и/или в записи выполнить проверку корректности данных в полях и/или в записи осуществить транзакционность изменений в нескольких таблицах осуществить транзакционность изменений в нескольких таблицах организовать «следственные изменения» в логически связанных таблицах организовать «следственные изменения» в логически связанных таблицах хранить описания полей/таблиц и «подвязанные» к полям классы, осуществляющие отображение данных на стороне клиента хранить описания полей/таблиц и «подвязанные» к полям классы, осуществляющие отображение данных на стороне клиента в последних версиях программируемая событийная модель позволяет программировать «административный уровень» обслуживания базы данных в последних версиях программируемая событийная модель позволяет программировать «административный уровень» обслуживания базы данных Нужно иметь ввиду и имеющуюся здесь ограничения (не все команды/функции VFP- среды поддержаны см. раздел Unsupported Visual FoxPro Commands and Functions в документации), в частности: не следует пытаться использовать классы (хотя формально ограничений вроде как нет) это сделает недоступным использованию VFP- базы данных через OLEDB Нужно иметь ввиду и имеющуюся здесь ограничения (не все команды/функции VFP- среды поддержаны см. раздел Unsupported Visual FoxPro Commands and Functions в документации), в частности: не следует пытаться использовать классы (хотя формально ограничений вроде как нет) это сделает недоступным использованию VFP- базы данных через OLEDB
Схема сетевого обмена данными в традиционном VFP-приложении Если источником служит VFP- база данных, то сервер используется чисто как файл-сервер. Если источником служит VFP- база данных, то сервер используется чисто как файл-сервер. Выполнение кода происходит только и только на машинах клиентов… Выполнение кода происходит только и только на машинах клиентов… … при этом, все требуемые для работы данные по сети доставляются каждому из клиентов. … при этом, все требуемые для работы данные по сети доставляются каждому из клиентов. Управление сетевым трафиком достаточно туманно… и скрыто во внутренних механизмах работы с данными среды VFP Управление сетевым трафиком достаточно туманно… и скрыто во внутренних механизмах работы с данными среды VFP
Многослойные архитектурные решения при создании приложений по обработке данных Основное отличие в том, что в двухслойной архитектуре любой клиент имеет «прямой доступ к базе данных», в то время как в трёхслойной – нет… И «доступ к данным осуществляется только и только через слой компонент» на сервере. Как следствие, управление сетевым трафиком полностью ложится на плечи разработчика. Основное отличие в том, что в двухслойной архитектуре любой клиент имеет «прямой доступ к базе данных», в то время как в трёхслойной – нет… И «доступ к данным осуществляется только и только через слой компонент» на сервере. Как следствие, управление сетевым трафиком полностью ложится на плечи разработчика. Двухслойная архитектура: Трёх и более слоёная архитектура:
Схема обращения клиента к серверной компоненте через RPC (Remote Procedure Call) Обращение клиента к серверу в локальной сети осуществляется через стандартизованный механизм удалённого вызова (RPC), который предполагает наличие посредников [заместителя (proxy) + заглушки (stub)], обеспечивающих вызов. На стороне клиента в качестве посредника используется Proxy, а на стороне севера Stub… Так что именно за ними скрыты все тонкости/детали организации собственно самого вызова.
Схема обращения клиента к серверу через SOAP (Simple Object Access Protocol) протокол SOAP отправитель SOAP получатель Для передачи SOAP сообщений может быть использован любой коммуникационный протокол Пример использования SOAP через HTTP-протокол: Запрос клиента к серверу (Request) Ответ сервера клиенту (Response) Структура SOAP сообщения
Шаги создания COM-компоненты в среде VFP Чтобы создать VFP-COM-компоненту, нужно проделать следующее: Чтобы создать VFP-COM-компоненту, нужно проделать следующее: Создать новый VFP-проект: Создать новый VFP-проект: Поместить в него код, показанный на следующем слайде… (вы можете создавать OLEPUBLIC классы как в PRG-файлах, так и в VCX, проект может содержать более чем один класс) Поместить в него код, показанный на следующем слайде… (вы можете создавать OLEPUBLIC классы как в PRG-файлах, так и в VCX, проект может содержать более чем один класс) … и откомпилировать полученное. … и откомпилировать полученное. Чтобы убедиться, что компонента работает, выполните из окна команд следующее: Чтобы убедиться, что компонента работает, выполните из окна команд следующее:
Код примера-теста VFP-COM-компоненты Завершения по любой ошибке именно функцией COMRETURNERROR() см. Q в MSDN Именно Session (с DataSession=2) и OLEPUBLIC
Интерфейсы созданной нами VFP-COM-компоненты Обратите внимание: нет ничего лишнего…
Шаги регистрации COM-компоненты в «Службе компонент» сервера (создание COM+ приложения) Запуск «Службы компонент» Создание нового «пустого» приложения Запускаемого на сервере Обратите внимание: для выполнения этих действий, вам потребуются права «локального администратора» этого сервера.
Настройка прав доступа к COM+ приложению Для обеспечения прав доступа к компонентам вашего COM+ приложения следует определить пользователя, от имени которого будет запускаться ваше приложение. Такой пользователь должен обладать неограниченными правами на файлы и ресурсы, используемые COM-компонентами приложения. На мой взгляд лучший вариант следующий: Для обеспечения прав доступа к компонентам вашего COM+ приложения следует определить пользователя, от имени которого будет запускаться ваше приложение. Такой пользователь должен обладать неограниченными правами на файлы и ресурсы, используемые COM-компонентами приложения. На мой взгляд лучший вариант следующий: Создать «локального пользователя», например: AppRuner и придать ему права «локального администратора». Создать «локального пользователя», например: AppRuner и придать ему права «локального администратора». Именно такого «локального пользователя» использовать в показанных ниже диалогах. Именно такого «локального пользователя» использовать в показанных ниже диалогах. Введите здесь «локального пользователя», обладающего правами «локального администратора» Переустановите здесь «локального пользователя», обладающего правами «локального администратора», если вы получили проблемы ограниченных прав
Компоненты поддержки VFP-COM на стороне сервера Прежде чем пытаться зарегистрировать вашу VFP-COM-компоненту, обратите внимание на то, что должно быть установлено на сервере: Прежде чем пытаться зарегистрировать вашу VFP-COM-компоненту, обратите внимание на то, что должно быть установлено на сервере: Для успешной регистрации VFP-COM-компоненты на сервере, требуется установка следующих библиотек (см. в C:\Program Files\Common Files\Microsoft Shared\VFP\): vfp t.dll [,vfp r.dll], vfp renu.dll [,vfp rrus.dll], [%windir%\system32\] GDIPlus.dll, MSVCR70.dll, здесь - номер версии Для успешной регистрации VFP-COM-компоненты на сервере, требуется установка следующих библиотек (см. в C:\Program Files\Common Files\Microsoft Shared\VFP\): vfp t.dll [,vfp r.dll], vfp renu.dll [,vfp rrus.dll], [%windir%\system32\] GDIPlus.dll, MSVCR70.dll, здесь - номер версии Если вы используете какие-либо дополнительные VFP-средства, то полный список файлов VFP-runtime можно найти на точнее, в зависимости от версий это: Если вы используете какие-либо дополнительные VFP-средства, то полный список файлов VFP-runtime можно найти на точнее, в зависимости от версий это: в MSDN: Q INFO: Visual FoxPro 6.0 Required Run-Time Files – VFP 6 в MSDN: Q INFO: Visual FoxPro 6.0 Required Run-Time Files – VFP 6 – VFP 7 – VFP – VFP 8 – VFP – VFP 9 – VFP 9 Если вы используете только VFP OLEDB, то установка VFP-runtime вообще говоря не требуется, однако необходимо установить vfpoledb.dll (см. в C:\Program Files\Common Files\System\Ole DB). Последнюю версию инсталляционного пакета можно скачать с Если вы используете только VFP OLEDB, то установка VFP-runtime вообще говоря не требуется, однако необходимо установить vfpoledb.dll (см. в C:\Program Files\Common Files\System\Ole DB). Последнюю версию инсталляционного пакета можно скачать с В VFP 9 появилась функция SYS(3101 [, nCodePage]) для установки требуемой «кодовой страницы», однако, если у вас установлены VFP-runtime версии младше 9, то здесь имеются проблемы (т.е. того, что возвращает функция CPCURRENT()), как исправить положение дел в зависимости от версий описано здесь: В VFP 9 появилась функция SYS(3101 [, nCodePage]) для установки требуемой «кодовой страницы», однако, если у вас установлены VFP-runtime версии младше 9, то здесь имеются проблемы (т.е. того, что возвращает функция CPCURRENT()), как исправить положение дел в зависимости от версий описано здесь: – для vfp6t.dll, vfp7t.dll, vfp8t.dll – для vfp6t.dll, vfp7t.dll, vfp8t.dll – для vfpoledb.dll ( , ) – для vfpoledb.dll ( , ) Для создания пакета установки в VFP 6.0 можно воспользоваться помощником (меню: tools/wizards/setup), а в VFP 7-9 приложением InstallShield Express Для создания пакета установки в VFP 6.0 можно воспользоваться помощником (меню: tools/wizards/setup), а в VFP 7-9 приложением InstallShield Express Установки следует производить только обладая правами «локального администратора» сервера. Установки следует производить только обладая правами «локального администратора» сервера.
Регистрация VFP-COM-объекта в COM+ приложении Собственно сама регистрация созданной в VFP многопоточной COM dll- ки тривиальна: достаточно из-под «Проводника Windows» зацепив мышкой «перетащить и отпустить» её в папку «Компоненты» нашего пока ещё пустого COM+ приложения с названием AppTestVfp. Собственно сама регистрация созданной в VFP многопоточной COM dll- ки тривиальна: достаточно из-под «Проводника Windows» зацепив мышкой «перетащить и отпустить» её в папку «Компоненты» нашего пока ещё пустого COM+ приложения с названием AppTestVfp. На слайде ниже показан результат этого действия. На слайде ниже показан результат этого действия. Обратите внимание на то: где именно на сервере расположена наша mytestvfpcom.dll, созданная как VFP-COM-компонента. Обратите внимание на то: где именно на сервере расположена наша mytestvfpcom.dll, созданная как VFP-COM-компонента.
Проверка работы VFP-COM-объекта в рамках COM+ приложения Здесь слева приведён JavaScript-код обращения к нашей тестовой VFP-COM- компоненте. Здесь слева приведён JavaScript-код обращения к нашей тестовой VFP-COM- компоненте. Если этот код выполнить непосредственно на сервере, то при успешном создании экземпляра нашего объекта, в то время пока диалог показа результата ещё не закрыт, в окне «Службы компонент» мы можем наблюдать «активность» нашей тестовой компоненты: Если этот код выполнить непосредственно на сервере, то при успешном создании экземпляра нашего объекта, в то время пока диалог показа результата ещё не закрыт, в окне «Службы компонент» мы можем наблюдать «активность» нашей тестовой компоненты:
Экспорт VFP-COM-компонент приложения для установки на стороне клиентов Наконец, последним шагом является получение инсталляционных файлов нашей VFP-COM-компоненты, чтобы установить последние на всех потенциальных клиентах. Наконец, последним шагом является получение инсталляционных файлов нашей VFP-COM-компоненты, чтобы установить последние на всех потенциальных клиентах. Благодаря «Службе компонент» этот шаг существенно облегчён, однако предполагается, что: Благодаря «Службе компонент» этот шаг существенно облегчён, однако предполагается, что: На клиентах установлен как минимум Windows Installer 2.0 На клиентах установлен как минимум Windows Installer 2.0 Также как и VFP-runtime, включая vfp t.dll Также как и VFP-runtime, включая vfp t.dll Также очевидно, что это шаг следует делать только в том случае, если вашими клиентами являются VFP (или другие) приложения, работающие в локальной сети через DCOM, в противном случае (при работе через SOAP и/или через HTTP) необходимость в этом шаге отпадает. Также очевидно, что это шаг следует делать только в том случае, если вашими клиентами являются VFP (или другие) приложения, работающие в локальной сети через DCOM, в противном случае (при работе через SOAP и/или через HTTP) необходимость в этом шаге отпадает.
Публикация COM-компоненты как Web Services с использованием WSDL Generator из SOAP Toolkit 3.0 Путь и файл не должны содержать русские буквы, только ANCI символы
Завершение публикации и проверка работоспособности нашего Web Service
Перечень возможностей COM+ приложений, выполняющихся в «Службе компонент» сервера При работе COM-компонент на стороне сервера возникает целая серия общих для этого случая задач, таких как: вынесение отдельных задач в отдельные потоки для увеличения производительности системы в целом, контроль доступа к объектам, и т.п. При работе COM-компонент на стороне сервера возникает целая серия общих для этого случая задач, таких как: вынесение отдельных задач в отдельные потоки для увеличения производительности системы в целом, контроль доступа к объектам, и т.п. COM-компонентами, работающими в раках «Службы компонент» предоставляется целая серия дополнительных возможностей, к ним в частности относятся: COM-компонентами, работающими в раках «Службы компонент» предоставляется целая серия дополнительных возможностей, к ним в частности относятся: активизация на время выполнения (just-in-time activation) активизация на время выполнения (just-in-time activation) общие и совместно используемые наборы свойств (shared properties) общие и совместно используемые наборы свойств (shared properties) ролевая система безопасности (role-based security) ролевая система безопасности (role-based security) поддержка транзакционности изменений (transactions) поддержка транзакционности изменений (transactions) поддержка асинхронных очередей сообщений (queued components) поддержка асинхронных очередей сообщений (queued components) обеспечение пула готовых к немедленному выполнению объектов (object pooling) обеспечение пула готовых к немедленному выполнению объектов (object pooling) и др. и др. Ниже мы рассмотрим лишь некоторые их них…
Завершение COM+ приложения из VFP-кода Код приведённый здесь и помещённый в событие BeforeBuild класса ProjectHook, который вы должны подключить к вашему проекту, обеспечит вам автоматическое завершение COM+ приложения при перекомпиляции вашего проекта. Т.е. перед подменой прежней dll-библиотеки на новую. Это видимо первое, с чем вам придётся столкнуться на этом пути… Cм. [1] в «Списке литературы». Код приведённый здесь и помещённый в событие BeforeBuild класса ProjectHook, который вы должны подключить к вашему проекту, обеспечит вам автоматическое завершение COM+ приложения при перекомпиляции вашего проекта. Т.е. перед подменой прежней dll-библиотеки на новую. Это видимо первое, с чем вам придётся столкнуться на этом пути… Cм. [1] в «Списке литературы».
Настройки Активизации COM+ компоненты (Just-in-time activation) По умолчанию поддержка JIT активизации компоненты включена По умолчанию поддержка JIT активизации компоненты включена Однако, она действительно необходима только в случае поддержки транзакций для ваших компонент Однако, она действительно необходима только в случае поддержки транзакций для ваших компонент
Получение ObjectContext
Использование ObjectContext (явная схема)
Использование ObjectContext (неявная схема VFP 7.0 и выше)
Схема «работы» Stateless объекта См. [3] в «Списке литературы».
Некоторые сравнительные характеристики Statefull и Stateless объектов ХарактеристикаStatefullStateless Время жизни Между серверными экземплярами объектов и клиентами установлено взаимно- однозначное соответствие. Каждый серверный объект создаётся конкретным клиентом и каждый из них существует так долго, сколько в нём имеется необходимость этого конкретного клиента. Один и тот же экземпляр серверного объекта может обслуживать сразу нескольких клиентов и может быть уничтожен сервером, как только необходимость в нём исчезает. Владение объектом Поскольку каждый экземпляр объекта имеет уникальную информацию в виде значений своих свойств, то он может быть использован только одним конкретным клиентом- владельцем и никем другим. Т.к. любой объект не имеет свойств, то не содержит никакой уникальной информации от клиента, и может быть использован сервером повторно, реализуя т.н. концепцию «пула объектов» (object pulling) [к сожалению, в VFP пока не поддержан] Ресурсы Для n одновременно работающих клиентов с m объектами объём требуемых на сервере ресурсов – n*m В аналогичных условиях объём требуемых на сервере ресурсов
Использование общих в рамках приложения данных В многопоточном варианте использования компонент (multi- threaded dll) существует проблема доступа к общим ресурсам для компонент выполняющихся в разных потоках одного и того же процесса. Чтобы в этих условиях обеспечить корректность данных (не потерять изменения и не получать непредсказуемые значения), в VFP реализовано ряд решений: В многопоточном варианте использования компонент (multi- threaded dll) существует проблема доступа к общим ресурсам для компонент выполняющихся в разных потоках одного и того же процесса. Чтобы в этих условиях обеспечить корректность данных (не потерять изменения и не получать непредсказуемые значения), в VFP реализовано ряд решений: Чтобы «инкапсулировать» работу с таблицами данных в рамках экземпляра класса, в качестве базового следует использовать класс Session с DataSession=2 (см. в MSDN Q PRB: COM.Dll In MTS 'Sharing' Data sessions Between Instances) Чтобы «инкапсулировать» работу с таблицами данных в рамках экземпляра класса, в качестве базового следует использовать класс Session с DataSession=2 (см. в MSDN Q PRB: COM.Dll In MTS 'Sharing' Data sessions Between Instances) Относительно использования глобальных переменных в нужно иметь ввиду следующее: Относительно использования глобальных переменных в нужно иметь ввиду следующее: во-первых, - для глобальных переменных в каждом потоке VFP образует собственный apartment, где содержит локальную копию данных (thread-local storage). Другими словами переменные, объявленные как PUBLIC, в действительности глобальны только по отношению к потоку. во-первых, - для глобальных переменных в каждом потоке VFP образует собственный apartment, где содержит локальную копию данных (thread-local storage). Другими словами переменные, объявленные как PUBLIC, в действительности глобальны только по отношению к потоку. во-вторых, - участки соответствующего кода можно поместить в критические секции, применяя VFP-функцию SYS(2336 [, nAction]) во-вторых, - участки соответствующего кода можно поместить в критические секции, применяя VFP-функцию SYS(2336 [, nAction]) наконец, - можно использовать «Share Properties Manager» «Службы компонент», где применены semaphores и locks в этих целях. наконец, - можно использовать «Share Properties Manager» «Службы компонент», где применены semaphores и locks в этих целях.
Пример кода, показывающего использование «Shared Property Manager» из «Службы Компонент» См. [1] в «Списке литературы».
Примеры кода, показывающего проверку роли клиента и контроль за флагами состояния в «Службе Компонент» Пример кода в VFP 7.0 и выше показывающий использование интерфейса IContextState из comsvcs.dll для контроля за флагами состояния (consistent flag and a done flag) в COM+ приложении в случае использования поддержки транзакций: Пример кода, показывающего проверку роли клиента в COM+ приложении в случае использования ролевой системы безопасности: Чтобы дополнительные возможности на уровне компонент были поддержаны, необходима соответствующая настройка в окне свойств компоненты в «Службе компонент».
Пример функционального разбиения VFP-приложения в трёхслойной архитектуре
Список литературы 1. "Microsoft Transaction Server for Visual FoxPro Developers" by Randy Brown, October 1998, MSDN Visual FoxPro 6.0 Technical Articles 2. "Understanding COM+ with VFP, Part 1-3" by Craig Berntson in MSDN (this article is reproduced from the May 2001 issue of FoxTalk) 3. COM+ and Windows 2000: Ten Tips and Tricks for Maximizing COM+ Performance by David S. Platt in MSDN 4. Как "работает" multi-threaded COM компонента под MS MTS/Component Services? М. Дроздов ( - содержит код ряда примеров, позволяющих уяснить некоторые детали работы VFP-COM- компонент )