Эта статья познакомит вас с приложениями, связанными с Windows Workflow 4.0 в Visual Studio 2010. Я надеюсь, что эта короткая статья поможет вам разработать Workflow 4.0.
Недавно установил Visual Studio 2010 на виртуальную машину. Интерфейс — WPF, и использование ЦП и памяти не преувеличено. Когда вы открываете очень простой прикрепленный лабораторный проект, загрузка ЦП обычно составляет менее 20%, а использование памяти — менее 800 МБ.
Давайте поближе познакомимся с Windows Workflow 4.0.
Модель рабочего процесса сильно изменилась по сравнению с версией 3.5.
Мы знаем, что рабочие процессы в версии 3.5 размещаются в WorkflowRuntime, а экземпляры рабочих процессов создаются и выполняются через WorkflowRuntime; в версии 4.0 нет класса WorkflowRuntime, поэтому вы можете легко создавать экземпляры WorkflowInstance и выполнять рабочие процессы напрямую. Код в Lab выглядит следующим образом:
WorkflowInstance myInstance = новый WorkflowInstance(new SayHello(),
новый SayHelloInArgs(userName));
myInstance.OnCompleted = делегат (WorkflowCompletedEventArgs e)
{
Console.WriteLine("*** Делегат OnCompleted выполняется в потоке {0} ***",
Thread.CurrentThread.ManagedThreadId);
SayHelloOutArgs outArgs = новый SayHelloOutArgs (e.Outputs);
приветствие = outArgs.Greeting;
syncEvent.Set();
};
myInstance.OnUnhandledException = делегат (WorkflowUnhandledExceptionEventArgs e)
{
Console.WriteLine(e.UnhandledException.ToString());
вернуть UnhandledExceptionAction.Terminate;
};
myInstance.OnAborted = делегат (WorkflowAbortedEventArgs e)
{
Console.WriteLine(e.Reason);
syncEvent.Set();
};
мойЭкземпляр.Выполнить();
В версии 4.0 есть класс WorkflowInvoker. Этот класс также может выполнять рабочие процессы, но этот класс используется для тестирования рабочих процессов. Это значительно упрощает тестирование рабочих процессов в предыдущей версии.
[Тестовый метод]
общественная недействительность ДолжныReturnGreetingWithName()
{
Dictionary<string, object> input = новый словарь
<строка, объект>()
{
{"Имя пользователя", "Тест"}
};
IDictionary<string, object> вывод;
вывод = WorkflowInvoker.Invoke(новый SayHello(), ввод);
Assert.AreEqual("Здравствуйте, тест из рабочего процесса 4", вывод["Приветствие"]);
}
Activity в версии 3.5 является базовым классом всех действий. Для реализации пользовательских действий вам нужно всего лишь переопределить метод Execute() класса Activity; в версии 4.0 все действия являются производными от абстрактного класса WorkflowElement и по умолчанию настраиваются в Visual Studio. Действия наследуются от CodeActivity или CodeActivity<T>. Аналогично, метод Execute() также необходимо переписать для реализации пользовательской логики выполнения.
общедоступный класс MyActivity1: CodeActivity
{
защищенное переопределение void Execute (контекст CodeActivityContext)
{
//ваш код реализации
}
}
Конечно, вы по-прежнему можете получать пользовательские действия из Activity, но это сильно отличается от версии 3.5.
открытый класс SayHelloInCode: Активность
{
защищенное переопределение WorkflowElement CreateBody()
{
вернуть новую последовательность()
{
Мероприятия =
{
новаяWriteLine()
{
Text = «Привет, рабочий процесс 4 в коде»
}
}
};
}
}
Недавно добавленная функция службы рабочего процесса в версии 4.0 может напрямую публиковать рабочий процесс как службу WCF. Конечно, рабочий процесс также должен быть спроектирован с использованием функции ответа WCF. Версия 4.0 предоставляет четыре действия, связанные с WCF: получение, получение ответа, отправку и отправку ответа. С помощью этих действий можно визуально определить операции службы WCF.
Базовая модель дизайнера рабочих процессов реализована в версии 4.0, а пользовательские дизайнеры могут быть легко реализованы.