Михаил Дроздов http://vfpdev.narod.ru Группа компаний ИВС, Пермь http://www.ics.perm.ru Создание COM-компонент "среднего слоя" в среде Microsoft Visual.

Презентация:



Advertisements
Похожие презентации
Сетевые службы Для конечного пользователя сеть это не компьютеры, кабели и концентраторы и даже не информационные потоки, для него сеть это, прежде всего,
Advertisements

WEB- ТЕХНОЛОГИИ Лекция 6. Понятие Web- сервисов 1 Интерфейс в глобальную сеть для некоторого абстрактного программного обеспечения, этот интерфейс позволяет.
Раздел 3 Сетевые модели. Тема 3.1 Понятие сетевой модели. Архитектура сети определяет основные элементы сети, характеризует ее общую логическую организацию,
Организация распределенных прикладных систем. Попытаемся ответить на вопросы Как устроены распределенные прикладные системы? Каковы наиболее важные их.
Проф. В.К.Толстых, Технологии разработки Internet- приложений Администрирование IIS 5, 6 сайт, виртуальный каталог, приложение, пул, рабочий.
Тема 5. Основы современной технологии программирования Программирование в средах современных информационных систем. Интегрированные системы разработки.
Что такое связи между таблицами В реляционной базе данных связи позволяют избежать избыточности данных. Например, в ходе создания базы данных, содержащей.
Технология модели «клиент-сервер». Роли Компьютер, управляющий тем или иным ресурсом, принято называть сервером этого ресурса Компьютер, желающий воспользоваться.
1 Современные системы программирования. Часть 2. Системное и прикладное программное обеспечение Малышенко Владислав Викторович.
Технические возможности. Наши цели Максимальная гибкость Максимальная скорость считывания и обработки данных Стабильность работы Максимальная простота.
Администрирование информационных систем Начало работы с MS SQL Server 2000.
Администрирование RAS серверов. RAS (Remote Access Server) сервер – это сервер удаленного доступа. Используется для соединения компьютеров по коммутируемым.
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ СТАВРОПОЛЬСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ УНИВЕРСИТЕТ.
БД (администрирование) 1 Базы данных (администрирование) Аблов Игорь Васильевич Кафедра информационных технологий.
Лекция 23 Лекция 23 Схемы распределения данных и запросов. Обработка распределенных данных и запросов. Многопотоковые и многосерверные архитектуры. Типы.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Рис Еталонная модель OSI Абонентская станция 1 Абонентская станция 2 Прикладной процесс АПрикладной процесс В Уровни Протоколы 1 Прикладной 2 Представительский.
Администрирование информационных систем Лекция 4. Система управления базами данных.
СУБД Microsoft Access 2003 ЗНАКОМСТВО. Что такое Access? Access – Приложение, входящее в состав пакета Microsoft Office (разработано компанией Microsoft).
Платформа разработки ASP.NET Гайдар Магдануров t: e: m: +7.
Транксрипт:

Михаил Дроздов Группа компаний ИВС, Пермь Создание 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- компонент )