Freigeben über


Beispiel für die Workflowserialisierung

Download sample

Dieses Beispiel veranschaulicht die Serialisierung eines deklarativen Workflows sowie das Deserialisieren und Ausführen des Workflows. Ein deklarativer Workflow wird erstellt, indem das Workflowobjektmodell in einer standardmäßigen Codedatei verwendet wird.

In der Main-Methode in Program.cs wird eine Workflowinstanz programmgesteuert erstellt, und eine benutzerdefinierte Aktivität des Typs ConsoleActivity wird hinzugefügt. Da für deklarative Workflows kein Code-Beside-Bereich verfügbar ist, müssen benutzerdefinierte Aktivitäten mit überschriebenen Execute-Methoden statt Codeaktivitäten mit Codehandlerroutinen verwendet werden. Im Beispiel verwendet eine einfache benutzerdefinierte Aktivität eine Zeichenfolgeneigenschaft mit dem Namen StringToWrite und gibt diese Zeichenfolge bei der Ausführung in der Konsole aus.

Als Nächstes wird der Workflow mit WorkflowMarkupSerializer in einer Markup (XAML)-Datei serialisiert. Die benutzerdefinierte Aktivität verfügt nur über eine Eigenschaft vom Typ String. Daher benötigen Sie für diesen Workflow kein benutzerdefiniertes Serialisierungsprogramm. Informationen über die Serialisierung von Aktivitäten mit komplexen Eigenschaftstypen finden Sie unter Beispiel für die benutzerdefinierte Serialisierung.

Als Nächstes wird durch die Deserialisierung der Markupdatei eine neue Workflowinstanz erstellt. Es wird kein Deserialisierer benötigt; stattdessen wird eine Überschreibung der CreateWorkflow-Funktion verwendet. Diese Überschreibung verwendet ein XmlReader-Objekt, das auf eine Markupdatei verweist.

Die CreateWorkflow-Methode führt standardmäßig auch eine Workflowvalidierung durch; falls Fehler gefunden werden, wird eine WorkflowValidationFailedException ausgelöst.

Zum Schluss wird der Workflow gestartet, und die StringToWrite-Eigenschaft der ConsoleActivity wird in der Konsole ausgegeben.

CreateWorkflow führt standardmäßig eine Validierung für jede erstellte Workflowinstanz durch. Wenn eine Anwendung dieses Verhalten optimieren und die Validierung selbst verwalten möchte, kann die Standardvalidierung anhand der WorkflowRuntimeSection.ValidateOnCreate-Eigenschaft deaktiviert werden. Stattdessen können die folgenden Codes zum Validieren des Workflows verwendet werden.

// 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);

Da in diesem Beispiel keine benutzerdefinierten Typen verwendet werden, ist auch kein Typanbieter zum Deserialisieren des Workflows notwendig. Wenn ein Typanbieter notwendig wird, kann er anhand des folgenden Codeausschnitts hinzugefügt werden:

// 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);

So erstellen Sie das Beispiel

  1. Laden Sie das Beispiel herunter, indem Sie auf Beispiel downloaden klicken.

    Hierdurch wird das Beispielprojekt auf die lokale Festplatte extrahiert.

  2. Klicken Sie auf Start, zeigen Sie auf Programme, zeigen Sie auf Microsoft Windows SDK, und klicken Sie dann auf CMD Shell.

  3. Wechseln Sie zum Quellverzeichnis des Beispiels.

  4. Geben Sie an der Eingabeaufforderung MSBUILD <Name der Projektmappendatei> ein.

So führen Sie das Beispiel aus

  • Führen Sie im Eingabeaufforderungsfenster des SDKs die EXE-Datei im Ordner HostApplication\bin\debug aus (bzw. im Ordner HostApplication\bin für die VB-Version des Beispiels), der sich unter dem Hauptordner des Beispiels befindet.

Siehe auch

Referenz

WorkflowMarkupSerializer

Weitere Ressourcen

Serializing Custom Activities
Serialization Overview
Workflow Markup Overview
Markupbeispiele

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.