この記事では、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<string, object> input = 新しい辞書
<文字列、オブジェクト>()
{
{"ユーザー名", "テスト"}
};
IDictionary<文字列、オブジェクト> 出力;
出力 = WorkflowInvoker.Invoke(新しい SayHello(), 入力);
Assert.AreEqual("こんにちは、ワークフロー 4 のテスト"、output["挨拶"]);
}
3.5 のアクティビティはすべてのアクティビティの基本クラスであり、カスタム アクティビティを実装するには、Activity の Execute() メソッドをオーバーライドするだけで済みます。4.0 では、すべてのアクティビティは抽象クラス WorkflowElement から派生し、Visual Studio で既定でカスタマイズされます。同様に、アクティビティは CodeActivity または CodeActivity<T> から継承され、Execute() メソッドもカスタム実行ロジックを実装するために書き換える必要があります。
パブリック クラス 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 で実装されており、カスタム デザイナーを簡単に実装できます。