Работа с серверным кодом в Visual Studio
Glossary Item Box
Общие положения
В процессе разработки на платформе bpm'online часто возникает необходимость созданния программного кода серверных схем типа "Исходный код". Это могут быть, например, пользовательские конфигурационные классы или веб-сервисы, написанные на языке C#. Начиная с версии 7.8, в приложении bpm'online появилась полноценная возможность отлаживать созданный пользователем программный код с помощью интегрированных функций отладки среды разработки Visual Studio. Отладчик Visual Studio позволяет приостанавливать выполнение методов, проверять значения переменных, изменять их и получать полное представление о том, что делает код.
Схема новой концепции разработки с использованием Visual Studio представлена на рис. 1. Представленная концепция подразумевает работу только в среде разработки. При этом изменять можно только серверные схемы типа "Исходный код", но отладка возможна для всех видов схем.
Рис. 1. — Схема концепции разработки с использованием Visual Studio
Общая последовательность действий при разработке решений с использованием Visual Studio следующая:
- Выполнить предварительные настройки приложения bpm'online и Visual Studio.
- Создать, получить или обновить пакет из репозитория SVN (1). При этом приложение обновит файлы в локальном каталоге рабочей копии (2), а также выгрузит необходимые dll библиотеки в IIS, выгрузит автогенерируемые исходные коды в локальный каталог конфигурационного проекта Visual Studio (3.1) со ссылками на файлы и ресурсы из локального каталога рабочей копии (3.2).
- Выполнить непосредственную разработку решения в Visual Studio, создав, например, класс конфигурационного сервиса.
- Сохранить, скомпилировать и отладить созданный исходный код. После успешной компиляции итоговая сборка будет помещена в каталог Bin, при этом IIS автоматически ее использует в приложении bpm'online (4).
- Зафиксировать изменения в SVN. Это можно осуществить или непосредственно из приложения (5.1), или из каталога рабочей копии (5.2) при помощи SVN-клиента, например, TortoiseSVN.
Конфигурационный проект представляет собой предварительно настроенное решение Visual Studio, которое поставляется с приложением bpm'online и находится по следующему пути:
[Путь к каталогу с установленным приложением]\Terrasoft.WebApp\Terrasoft.Configuration\
Структура конфигурационного проекта представлена в табл. 1.
Табл. 1. — Структура конфигурационного проекта
Каталог | Назначение |
---|---|
Lib | Каталог, содержащий библиотеки классов всех пакетов. |
Autogenerated\Src | Каталог, содержащий файлы с исходным кодом пакетов сторонних издателей и пакета Custom, а также файлы автогенерируемого кода. |
Pkg | Локальный каталог рабочей копии репозитория конфигурационных пакетов. |
bin | Каталог выгрузки скомпилированной конфигурации и сторонних библиотек. |
Алгоритм действий при разработке решений с использованием Visual Studio
1. Выполнить предварительные настройки
Прежде чем выполнять разработку конфигурационного проекта приложения, необходимо выполнить настройку среды разработки. Этот шаг выполняется только один раз для каждой среды разработки.
1.1. Настройка SVN
Процесс разработки новых решений в приложении bpm'online подразумевает создание программного кода в так называемой среде разработки, т.е. в отдельно установленной копии приложения. Как правило, приложение установлено локально на компьютере разработчика, который имеет полный доступ к файловой системе. Для управления версиями разрабатывемого решения используется хранилище SVN, процесс установки и настройки которого подробно описан в статье "Как настроить хранилище SVN".
1.2. Настройка приложения bpm'online
Для того чтобы использовать Visual Studio для разработки конфигураций, необходимо внести изменения в конфигурационные настройки приложения в файле Web.config, который находится в корневом каталоге с установленным приложением. Необходимо установить значение true для параметров fileDesignMode и UseIDEForCompilation:
<fileDesignMode enabled="true" UseIDEForCompilation="true" />
Параметр fileDesignMode отвечает за переключение между режимами хранения разрабатываемых исходных кодов в файловой системе (true) и в базе данных (false), а параметр UseIDEForCompilation — за переключение между компиляцией в Visual Studio (true) и компиляцией в приложении (false).
Для того чтобы рабочая копия репозитория конфигурационных пакетов находилась в каталоге Pkg конфигурационного проекта, нужно установить соответствующее значение настройки defPackagesWorkingCopyPath в конфигурационном файле ConnectionStrings.config приложения. Так, например, если приложение установлено в каталоге "C:\bpmonline78", то значение настройки defPackagesWorkingCopyPath будет следующим:
<add name="defPackagesWorkingCopyPath" connectionString="C:\bpmonline78\Terrasoft.WebApp\Terrasoft.Configuration\Pkg" />
Подробнее о редактировании и назначении настроек в конфигурационном файле ConnectionStrings.config можно узнать из статьи "Как развернуть приложение on-site".
Для того чтобы приложение могло корректно работать с конфигурационным проектом, необходимо для каталога Terrasoft.Configuration дать полный доступ пользователю операционной системы, от имени которого запущен пул приложений IIS (рис. 2). Как правило, это встроенный пользователь с именем IIS_IUSRS.
Рис. 2. — Настройка прав доступа к каталогу Terrasoft.Configuration
1.3 Настройка Visual Studio и Workspace Console
Компиляция конфигурационного проекта происходит с помощью утилиты Workspace Console, которая поставляется вместе с приложением. Это дает следующие преимущества:
- Значительное ускорение компиляции за счет того, что конфигурационная сборка разбивается на независимые компилируемые модули. Перекомпилируются только те модули, пакеты которых были изменены.
- Для повторной компиляции конфигурационной сборки не нужно выходить из режима отладки или отсоединяться от процесса IIS.
Прежде чем использовать утилиту Workspace Console, необходимо запустить на выполнение пакетный файл команд, который выполнит необходимую подготовку. Для 32-битной версии операционной системы Windows необходимо запустить файл PrepareWorkspaceConsole.x86.bat, а для 64-битной системы — файл PrepareWorkspaceConsole.x64.bat. Эти файлы находятся в каталоге с установленным приложением по следующему пути:
[Путь к каталогу с установленным приложением]\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\
Для корректной работы утилиты Workspace Console с базой данных приложения необходимо настроить конфигурационный файл Terrasoft.Tools.WorkspaceConsole.exe.config. Для этого необходимо указать те же значения параметров в секции db, что и в файле ConnectionStrings.config. Подробнее о настройке параметров файла ConnectionStrings.config можно узнать из статьи "Как развернуть приложение on-site". Пример секции db файла Terrasoft.Tools.WorkspaceConsole.exe.config:
<add name="db" connectionString="Data Source=DBSERVER;Initial Catalog=BPMonline78;User ID=CustomUser;Password=CustomPassword; Persist Security Info=True; MultipleActiveResultSets=True; Pooling = true; Max Pool Size = 100; Async = true" />
Чтобы использовать утилиту Workspace Console для компиляции в Visual Studio, необходимо настроить внешние инструменты (External Tools). Для этого в среде Visual Studio необходимо выполнить команду меню Tools > External Tools... (рис. 3).
Рис. 3. — Добавление внешнего инструмента в Visual Studio
В появившемся диалоговом окне (рис. 4) необходимо добавить и настроить три команды вызова утилиты Workspace Console. Команды Build Workspace и Rebuild Workspace предназначены для компиляции изменений и полной компиляции конфигурационного проекта. Команда Update Workspace предназначена для обновления решения Visual Studio конфигурационного проекта из базы данных приложения. Она применяет все изменения, внесенные пользователем через приложение. Свойства и аргументы команд приведены в табл. 2...4. Для всех трех команд также необходимо установить признак Use Output window (рис. 4).
Рис. 4. — Установка свойств и аргументов внешней команды Visual Studio
Табл. 2. — Свойства команды Build Workspace
Title | Build Workspace |
---|---|
Command |
[Путь к каталогу с установленным приложением]\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.Tools.WorkspaceConsole.exe Пример: C:\bpmonline78\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.Tools.WorkspaceConsole.exe |
Arguments |
--operation=BuildWorkspace --workspaceName=Default --webApplicationPath="[Путь к каталогу с установленным приложением]\Terrasoft.WebApp\" Пример: --operation=BuildWorkspace --workspaceName=Default --webApplicationPath="C:\bpmonline78\Terrasoft.WebApp\" |
Табл. 3. — Свойства команды Rebuild Workspace
Title | Rebuild Workspace |
---|---|
Command |
[Путь к каталогу с установленным приложением]\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.Tools.WorkspaceConsole.exe Пример: C:\bpmonline78\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.Tools.WorkspaceConsole.exe |
Arguments |
--operation=RebuildWorkspace --workspaceName=Default --webApplicationPath="[Путь к каталогу с установленным приложением]\Terrasoft.WebApp\" Пример: --operation=RebuildWorkspace --workspaceName=Default --webApplicationPath="C:\bpmonline78\Terrasoft.WebApp\" |
Табл. 4. — Свойства команды Update Workspace Solution
Title | Update Workspace Solution |
---|---|
Command |
[Путь к каталогу с установленным приложением]\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.Tools.WorkspaceConsole.exe Пример: C:\bpmonline78\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.Tools.WorkspaceConsole.exe |
Arguments |
--operation=UpdateWorkspaceSolution --workspaceName=Default --webApplicationPath="[Путь к каталогу с установленным приложением]\Terrasoft.WebApp\" Пример: --operation=UpdateWorkspaceSolution --workspaceName=Default --webApplicationPath="C:\bpmonline78\Terrasoft.WebApp\" |
Для того чтобы сборка решения производилась утилитой, а не компилятором Visual Studio, необходимо настроить свойства активной конфигурации решения. Для этого в среде Visual Studio необходимо выполнить команду меню Build > Configuration Manager (рис. 5).
Рис. 5. — Вызов менеджера конфигураций решения
В появившемся диалоговом окне менеджера конфигураций решения необходимо для проекта Terrasoft.Configuration отключить признак Build (рис. 6).
Рис. 6. — Настройка свойств текущей конфигурации решения
Для обеспечения возможности отладки исходного кода схемы необходимо включить возможность поиска исходных кодов сторонних библиотек, не поставляемых с решением. Для этого необходимо выполнить команду меню Debug > Options... и в появившемся диалоговом окне настроек отключить опцию Enable Just My Code (рис. 7). Подробнее об опции Enable Just My Code можно узнать здесь.
Рис. 7. — Настройка свойств отладки
2. Создать, получить или обновить пакет из репозитория SVN
На текущий момент поддерживается работа только со схемами, которые предварительно были созданы в приложении. Поэтому необходимо либо создать новую схему в пользовательском пакете в разделе [Конфигурация], либо обновить уже существующий пакет со схемами из хранилища, либо установить пакет со схемами из хранилища в текущую конфигурацию. Возможности раздела [Конфигурация] описаны в статье "Раздел [Конфигурация]". О том как работать с хранилищем, подробно изложено в статье "Как настроить хранилище SVN".
Например, необходимо создать пользовательский сервис UsrGreetingService, который будет возвращать строку с приветствием. Для этого в разделе [Конфигурация] необходимо создать новый пользовательский пакет с названием, например, UsrServices и в этот пакет добавить схему типа "Исходный код" с названием UsrGreetingService. Далее рекомендуется созданный пакет зафиксировать в хранилище.
К СВЕДЕНИЮ Для разработки в Visual Studio схему не обязательно фиксировать в хранилище сразу же после ее создания. Однако если после завершения разработки необходима будет фиксация схемы в хранилище из файловой системы с помощью клиента SVN, то все равно нужно будет сначала в первый раз зафиксировать пользовательский пакет в хранилище из раздела [Конфигурация] приложения. |
3. Выполнить непосредственную разработку решения в Visual Studio
Прежде чем выполнять непосредственную разработку решения в Visual Studio, необходимо выгрузить существующие схемы из базы данных в файловую систему. Для этого нужно либо нажать кнопку "Обновить проект Visual Studio" в разделе [Конфигурация] (рис. 7), либо выполнить команду меню Tools > Update Workspace Solution непосредственно из Visual Studio (см. шаг 1).
Рис. 8. — Обновление проекта Visual Studio из раздела [Конфигурация]
При этом приложение обновит файлы в локальном каталоге рабочей копии, а также выгрузит необходимые dll библиотеки в IIS, выгрузит автогенерируемые исходные коды в локальный каталог конфигурационного проекта Visual Studio со ссылками на файлы и ресурсы из локального каталога рабочей копии.
Так, например, сгенерированный системой файл схемы UsrServiceGreetingSchema.UsrServices_Entity.cs будет помещен в каталог Autogenerated\Src (см. табл. 1), а исходный код этой схемы будет помещен в файл UsrServiceGreeting.cs в каталоге Pkg\UsrServices\Schemas\UsrGreetingService.
Пример реализации исходного кода, который необходимо добавить в содержимое файла UsrServiceGreeting.cs, используя Visual Studio:
// Класс конфигурационного сервиса должен быть реализован в пространстве имен Terrasoft.Configuration namespace Terrasoft.Configuration { using System.ServiceModel; using System.ServiceModel.Activation; using System.ServiceModel.Web; // Класс, реализующий конфигурационный сервис. [ServiceContract] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] public class UsrGreetingService : System.Web.SessionState.IReadOnlySessionState { // Операция сервиса. [OperationContract] [WebInvoke(Method = "GET", UriTemplate = "Hello")] public string TestHello() { return "Hello!"; } } }
Подробнее о назначении атрибутов класса, реализующего конфигурационный сервис, можно узнать из статьи "Как создать свой конфигурационный сервис".
4. Сохранить, скомпилировать и отладить созданный исходный код
После того как исходный код был изменен, прежде чем выполнить его компиляцию и отладку, необходимо обязательно его сохранить. Обычно это выполняет Visual Studio автоматически, но поскольку компилятор Visual Studio не используется, эту операцию нужно выполнять разработчику самостоятельно.
После сохранения измененный исходный код необходимо скомпилировать. В случае успешной компиляции сервис становится доступным. Для рассматриваемого примера сервис доступен по адресу:
http://[URL приложения]/0/rest/UsrGreetingService/Hello
После успешной компиляции итоговая сборка будет помещена в каталог Bin, при этом IIS автоматически ее использует в приложении bpm'online.
В процессе разработки часто возникают ситуации, когда необходимо произвести отладку созданного исходного кода. Для того чтобы начать отладку, необходимо прикрепиться к процессу сервера IIS, в котором запущено приложение. Для этого нужно выполнить команду меню Debug > Attach to process (рис. 9).
Рис. 9. — Прикрепление к процессу
В открывшемся окне в списке процессов нужно выбрать рабочий процесс IIS, в котором запущен пул приложения bpm'online (рис. 10).
Рис. 10. — Прикрепление к рабочему процессу IIS
Название рабочего процесса может различаться в зависимости от конфигурации импользуемого сервера IIS. Так, для полнофункционального IIS процесс называется w3wp.exe, для IIS Express — iiexpress.exe.
По умолчанию рабочий процесс IIS запущен под учетной записью, имя которой совпадает с именем пула приложения. Для того чтобы отобразить процессы всех пользователей, а не только текущего, необходимо установить признак Show processes from all users (рис. 10).
После прикрепления к рабочему процессу IIS необходимо выполнить повторную компиляцию. Далее можно приступить к процессу отладки средствами отладчика Visual Studio. Например, можно установить точки останова, просматривать значения переменных, стек вызовов и т.д. С возможностями отладчика Visual Studio можно ознакомиться здесь.
5. Зафиксировать изменения в SVN
Фиксацию произведенных изменений можно осуществить или непосредственно из приложения в разделе [Конфигурация], или из каталога рабочей копии при помощи SVN-клиента, например TortoiseSVN. Подробно о работе с хранилищем изложено в статье "Как настроить хранилище SVN".