本文將為大家介紹的Windows Workflow 4.0在Visual Studio 2010中的相關應用,希望簡短的文章能為大家搞好Workflow 4.0開發有所幫助。
最近在虛擬機中安裝了Visual Studio 2010。界面是WPF的,CPU和內存占用不是很誇張,打開一個很簡單的附帶的Lab Project, CPU使用率一般在20%一下,內存使用不到800M。
言歸正傳,還是來介紹Windows Workflow 4.0。
與3.5相比工作流模型有了很大改變和不同。
我們知道3.5中工作流都是托管在WorkflowRuntime中的,通過WorkflowRuntime來創建、執行工作流實例;在4.0中沒有WorkflowRuntime類,可以方便的直接創建WorkflowInstance實例和執行工作流。Lab中代碼如下:
WorkflowInstance myInstance = new WorkflowInstance(new SayHello(),
new SayHelloInArgs(userName));
myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs e)
{
Console.WriteLine("*** OnCompleted delegate is running on thread {0} ***",
Thread.CurrentThread.ManagedThreadId);
SayHelloOutArgs outArgs = new SayHelloOutArgs(e.Outputs);
greeting = outArgs.Greeting;
syncEvent.Set();
};
myInstance.OnUnhandledException = delegate(WorkflowUnhandledExceptionEventArgs e)
{
Console.WriteLine(e.UnhandledException.ToString());
return UnhandledExceptionAction.Terminate;
};
myInstance.OnAborted = delegate(WorkflowAbortedEventArgs e)
{
Console.WriteLine(e.Reason);
syncEvent.Set();
&n
bsp; };
myInstance.Run();
4.0中有一個WorkflowInvoker類,這個類也可以執行工作流,只不過這個類是用來測試工作流的,這很大的改進了前一版本中工作流難以測試的問題。
[TestMethod]
public void ShouldReturnGreetingWithName()
{
Dictionary<string, object> input = new Dictionary
<string, object>()
{
{"UserName", "Test"}
};
IDictionary<string, object> output;
output = WorkflowInvoker.Invoke(new SayHello(), input);
Assert.AreEqual("Hello, Test from Workflow 4", output["Greeting"]);
}
3.5中Activity是所有活動的基類,要實現自定義活動,只需重寫Activity 的Execute()方法;在4.0中所有的活動都是從抽象類WorkflowElement派生出來的,而且Visual Studio中默認自定義活動都是從CodeActivity或CodeActivity<T>繼承的,相似的是也需要重寫Execute()方法,從而實現自定義執行邏輯。
public class MyActivity1 : CodeActivity
{
protected override void Execute(CodeActivityContext context)
{
//你的實現代碼
}
}
當然,你還是可以從Activity派生自定義活動,不過與3.5有很大不同。
public class SayHelloInCode : Activity
{
protected override WorkflowElement CreateBody()
{
return new Sequence()
{
ActivitIEs =
{
new WriteLine()
{
Text = "Hello Workflow 4
in code"
}
}
};
}
}
4.0中新增加的工作流服務功能,可以直接把工作流發布為WCF服務,當然工作流也必須設計為具有WCF應答功能才行。4.0提供4個與WCF相關的活動:Receive、ReceiveReply、Send、SendReply,通過這些活動可以可視化定義WCF的服務操作。
4.0中實現了工作流設計器的基本模型,可以很容易的實現自定義設計器。