ワークフロー シリアル化サンプル
このサンプルでは、宣言型ワークフローをシリアル化する方法、およびワークフローを逆シリアル化して実行する方法を示します。宣言型ワークフローは、標準的なコード ファイルを使用して作成するのではなく、ワークフロー オブジェクト モデルを使用して作成されます。
Program.cs の Main メソッドでは、ワークフロー インスタンスはプログラムで作成され、ConsoleActivity 型のカスタム アクティビティが追加されます。宣言型ワークフローではコード側を使用できないため、コード ハンドラ ルーチンを持つ Code アクティビティの代わりに、オーバーライドされた Execute メソッドを持つカスタム アクティビティを使用する必要があります。サンプルでは、使用される簡単なカスタム アクティビティが StringToWrite という文字列プロパティを取得し、実行時にその文字列をコンソールに出力します。
次に、WorkflowMarkupSerializer を使用して、ワークフローがマークアップ (XAML) ファイルにシリアル化されます。カスタム アクティビティには、String 型のプロパティのみが含まれます。したがって、このワークフローにカスタム シリアライザは必要ありません。複雑なプロパティ型を持つアクティビティをシリアル化する方法については、「カスタム シリアル化のサンプル」を参照してください。
次に、マークアップ ファイルを逆シリアル化して新しいワークフロー インスタンスを作成します。デシリアライザは必要ありません。代わりに CreateWorkflow 関数のオーバーライドを使用します。このオーバーライドは、マークアップ ファイルを指す XmlReader オブジェクトを取得します。
既定では、CreateWorkflow メソッドはワークフローの検証も実行します。エラーが検出された場合は、WorkflowValidationFailedException がスローされます。
最後に、ワークフローが開始され、ConsoleActivity の StringToWrite プロパティがコンソールに出力されます。
既定では、ワークフロー インスタンスが作成されるたびに、CreateWorkflow は検証を実行します。アプリケーションでこの動作を最適化し、検証もアプリケーションで管理する場合は、WorkflowRuntimeSection.ValidateOnCreate プロパティを使用して既定の検証を無効にすることができます。ワークフローの検証では、代わりに次のコードを使用できます。
// Get the type of the workflow and extract the validator attribute from it
Type workflowType = workflow.GetType();
ActivityValidatorAttribute validatorAttribute = (ActivityValidatorAttribute)workflowType.GetCustomAttributes(typeof(ActivityValidatorAttribute), true)[0];
// Load the validator type and create an instance of the validator
Type validatorType = Type.GetType(validatorAttribute.ValidatorTypeName);
Validator validator = (Validator)Activator.CreateInstance(validatorType);
// Create validation manager and validate the workflow
ValidationManager manager = new ValidationManager(workflowRuntime, true);
ValidationErrorCollection validationErrors = validator.Validate(manager, workflow);
また、サンプルの場合はカスタム タイプが使用されていないため、ワークフローを逆シリアライズする型プロバイダは必要ありません。型プロバイダが必要な場合は、次のコード スニペットを使用して追加できます。
// Push a type provider to resolve a referenced assembly
// The type provider is not necessary in this case,
// since the referenced assembly is already loaded in the appdomain
// but it is shown for general purpose applications.
TypeProvider typeProvider = new TypeProvider(null);
typeProvider.AddAssembly(typeof(ConsoleActivity).Assembly);
workflowRuntime.AddService(typeProvider);
サンプルをビルドするには
[サンプルのダウンロード] をクリックしてサンプルをダウンロードします。
これにより、サンプル プロジェクトがローカルのハード ディスクに抽出されます。
[スタート] をクリックし、[すべてのプログラム] をポイントします。次に、[Microsoft Windows SDK] をポイントし、[CMD シェル] をクリックします。
サンプルのソース ディレクトリに移動します。
コマンド プロンプトで、「MSBUILD <ソリューション ファイル名>」と入力します。
サンプルを実行するには
- [SDK コマンド プロンプト] ウィンドウで、HostApplication\bin\debug フォルダ (このサンプルの VB のバージョンでは、HostApplication\bin フォルダ) にある .exe ファイルを実行します (このサンプルでは、メイン フォルダの下にあります)。
関連項目
参照
その他の技術情報
Serializing Custom Activities
Serialization Overview
Workflow Markup Overview
マークアップのサンプル
Copyright © 2007 by Microsoft Corporation.All rights reserved.