本文將為大家介紹的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();
};
myInstance.Run();
4.0中有一個WorkflowInvoker類,這個類別也可以執行工作流程,只不過這個類別是用來測試工作流程的,這很大的改進了先前版本中工作流程難以測試的問題。
[TestMethod]
public void ShouldReturnGreetingWithName()
{
Dictionary
{
{"UserName", "Test"}
};
IDictionary
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
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中實作了工作流程設計器的基本模型,可以輕鬆的實作自訂設計器。