この記事では、Visual Studio 2010 の Windows ワークフロー 4.0 の関連アプリケーションを紹介します。この短い記事がワークフロー 4.0 の開発に役立つことを願っています。
最近、仮想マシンに Visual Studio 2010 をインストールしました。インターフェイスは WPF であり、非常に単純な添付されたラボ プロジェクトを開くと、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(ユーザー名));
myInstance.OnCompleted = デリゲート(WorkflowCompletedEventArgs e)
{
Console.WriteLine("*** OnCompleted デリゲートはスレッド {0} で実行されています ***",
スレッド.現在のスレッド.管理対象スレッド ID);
SayHelloOutArgs outArgs = new 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();
};
myInstance.Run();
4.0 には WorkflowInvoker クラスがあります。このクラスもワークフローを実行できますが、このクラスはワークフローのテストに使用されており、以前のバージョンでのワークフローのテストの難しさが大幅に改善されました。
[テスト方法]
public void ShouldReturnGreetingWithName()
{
Dictionary
<文字列、オブジェクト>()
{
{"ユーザー名", "テスト"}
};
IDictionary<文字列、オブジェクト> 出力;
出力 = WorkflowInvoker.Invoke(新しい SayHello(), 入力);
Assert.AreEqual("こんにちは、ワークフロー 4 のテスト"、output["挨拶"]);
}
3.5 のアクティビティはすべてのアクティビティの基本クラスであり、カスタム アクティビティを実装するには、Activity の Execute() メソッドをオーバーライドするだけで済みます。4.0 では、すべてのアクティビティは抽象クラス WorkflowElement から派生し、Visual Studio で既定でカスタマイズされます。同様に、アクティビティは CodeActivity または CodeActivity
パブリック クラス MyActivity1 : CodeActivity
{
protected オーバーライド void Execute(CodeActivityContext context)
{
// 実装コード
}
}
もちろん、Activity からカスタム アクティビティを派生させることはできますが、3.5 とは大きく異なります。
パブリック クラス SayHelloInCode : アクティビティ
{
保護されたオーバーライド WorkflowElement CreateBody()
{
新しいシーケンスを返す()
{
活動内容=
{
newWriteLine()
{
テキスト = 「コード内のワークフロー 4 をこんにちは」
}
}
};
}
}
4.0 で新たに追加されたワークフロー サービス機能では、ワークフローを WCF サービスとして直接公開できます。もちろん、ワークフローも WCF 応答機能を使用して設計する必要があります。 4.0 には、Receive、ReceiveReply、Send、および SendReply という 4 つの WCF 関連アクティビティが用意されており、これらのアクティビティを通じて、WCF サービス操作を視覚的に定義できます。
ワークフロー デザイナーの基本モデルは 4.0 で実装されており、カスタム デザイナーを簡単に実装できます。