Программирование >>  Программирование с использованием ajax 

1 ... 388 389 390 [ 391 ] 392 393 394 ... 396


[ActivityValidator(typeof(DebugActivityValidator))] [Designer(typeof(DebugActivityDesigner))]

public class DebugActivity : Activity {


Puc. 36.17.

Улучиленный внешний вид действия DebugActivity

Здесь был добавлен атрибут Designer типа DebugActivity Designer. Если вы теперь скомпилируете приложение и перетащите на поверхность визуального конструктора действие DebugActivity (или просто откроете какой-то существующий рабочий поток, содержащий такое действие), оно будет иметь более совершенный вид, как показано на рис. 36.17.

В случае внесения в тему изменений и перекомпиляции действия может возникнуть вопрос о том, почему эти изменения не отражаются сразу же внутри Visual Studio. Дело в том, что когда среда Visual Studio обнаруживает конструктор для конкретного типа, она кэширует его внутренним образом, поэтому единственным способом обновить представление является перезапуск Visual Studio.

В случае удаления из кода действия атрибута Designer и его

повторной компиляция в пользовательском интерфейсе (UI) все равно будет отображаться старый конструктор, поэтому перезапуск Visual Studio является единственным возможным вариантом.

Исполняющая среда рабочего потока

Класс Workf lowRuntime может размещаться в консольном приложении, как показывалось до сих пор в этой главе, но вообще может размещаться в любом .NET-прило-жении, например, в приложении Windows Forms на клиентской машине или внутри сайта ASP.NET для того, чтобы рабочие потоки могли выполняться на основании действий, которые пользователь предпринимает на Web-сайте. Исполняющая среда рассчитана на использование во всех этих средах и обладает специфической поддержкой для каждого типа приложения.

Помимо рабочих потоков, исполняющая среда еще обслуживает ряд служб, которыми пользуется сама и которые также могут использовать и рабочие потоки по мере своего выполнения. Каждая такая служба представляет собой экземпляр .NET-класса, который был зарегистрирован с исполняющей средой.

Пожалуй, наиболее полезной из этих служб является служба обеспечения постюянства (persistence service), которая берет простаивающий рабочий поток и сохраняет его на диске. Подобное обычно происходит, когда в рабочем потоке присутствует задержка, ведь хранить рабочий поток в памяти, пока он находится в спящем состоянии, нет никакой необходимости, а раз так, значит, служба обеспечения постоянства может упаковывать состояние рабочего потока и сохранять его на диске.

В плане программирования в .NET служба обеспечения постоянства следует общей модели, т.е. подразумевает использование абстрактного класса, от которого путем наследования можно создавать другой класс и предоставлять специфическую реализацию. Абстрактным классом в данном случае является Workf lowPersistenceService, а унаследованным классом, обеспечивающим специфическую реализацию, например, сохранение данных службы в базе данных SQL - SqlWorkf lowPersistenceService.



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

В следующем практическом занятии демонстрируется пример создания рабочего потока с действием DelayActivity и обеспечением возможности его сохранения в базе данных SQL Server. Сначала создается новая база данных, а затем выполняются два поставляемых с WF сценария для создания таблиц и хранимых процедур, необходимых службе обеспечения постоянства.

Практичеокое занятие

Использование службы обеспечения постоянства

Существуют несколько разных способов для создания новой базы данных SQL Server, но в данном примере предполагается, что на компьютере установлена версия SQL Express и потому создавать базу данных и запускать сценарии можно только из Visual Studio.

1. В окне Server Explorer (Проводник сервера) выберите внутри узла Data Connections (Подключения данных) опцию Create New SQL Server Database (Создать новую базу данных SQL Server). Это приведет к отображению диалогового окна Create New SQL Server Database (Создание новой базы данных SQL Server), показанного на рис. 36.18.

Create N*w SQL S

1юп to connect to a SQL Server, then

e of a databMC to crwte.

Server nam*

Asqiexpress

Log on to the seivef

# Use yindows AuthentKation Use SQL Server Authentkelion

rn S3ve my pastiword

NewiiatabaMnarne

Puc. 36.18. Диалоговое окно Create New SOL Server Database

2. В поле для имени сервера базы данных введите . \sqlexpress, а в поле для имени самой базы данных - WF. После этого в окне Server Explorer появится элемент, представляющий только что созданную базу данных.

3. Выполните в отношении этой базы данных два сценария, которые хранятся в каталоге %windir%\Microsof t .NET\Framework\v3. 5\SQL\EN. Для этого откройте в Visual Studio два показанных в диалоговом окне на рис. 36.19 файла, а именно- SqlPersistenceProviderSchema.sql и SqlPersistenceProviderLogic. sql. В одном содержится схема для службы обеспечения постоянства, а в другом - логика (хранимые процедуры).



и> Open Flic

35 SQL t EN

л\9ll< Link. Щ Documenti

. Protect.

>y Reten<f, Changed Devktop Pnrnt Places Ц1 Comparer ( Pictuir 1 Mu%ic Mofe

Name

D )pSqlPer5istenceProv>derLog c $qt j DropSqlPersittencePro. drSchenria tql

SqiPenistenceProvtderLogK $qi SqlPerjirtenceProv.derSchemi $q:

Date nriodif .ed 23 W 2007 0006 31 01 2007 0928 23/07 2007 00Ю6 19 те 2007 0011 SQLF4e

Type SQL File! SQL File SQL File

Foldeti

Fte Qame ScPwMtonceProvioerSchema aqi

Puc. 36.19. Открытие файлов SqlPersistenceProviderSchema. sql и SqlPersistenceProviderLogic, sql в Visual Studio

4. После открытия этих файлов в Visual Studio можно переходить к их поочередному выполнению. Сначала запустите файл SqlPersistenceProviderSchema.sql, для чего просто нажмите клавишу <F5> и выберите созданную в предыдущем шаге базу данных WF.

Далее точно таким же образом запустите файл SqlPersistenceProviderLogic.sql.

5. Теперь, когда база данных SQL подготовлена, можно переходить к созданию нового проекта и применению в нем службы постоянства. Создайте новый проект типа Sequential Workflow Console Application (Консольное приложение последовательного рабочего потока), перетащите в него действие DelayActivity и установите для его свойства TimeoutDuration значение, равное пяти секундам - чуть позже вы увеличите этот интервал.

6. Чтобы иметь возможность просматривать состояние рабочего потока по мере его выполнения, нужно добавить в основную программу несколько обработчиков событий. Для этого откройте файл Program.cs и добавьте в него обработчики событий Workflowldled, WorkflowUnloaded, WorkflowPersisted и Workf lowLoaded так, чтобы они просто выводми информацию на консоль: static void Main(string [ ] args)

using(WorkflowRuntime workflowRuntime {

new WorkflowRuntime0

workflowRuntime.Workflowldled +=

new EventHandler<WorkflowEventArgs>(Workflowldled); workflowRuntime.WorkflowPersisted +=

new EventHandler<WorkflowEventArgs>(WorkflowPersisted) ; workflowRuntime.WorkflowLoaded +=

new EventHandler<WorkflowEventArgs>(WorkflowLoaded); workflowRuntime.WorkflowUnloaded +=

new EventHandler<WorkflowEventArgs>(WorkflowUnloaded);



1 ... 388 389 390 [ 391 ] 392 393 394 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика