Freigeben über


Neuerungen in Windows Workflow Foundation in .NET Framework 4.5

Windows Workflow Foundation (WF) in .NET Framework 4.5 führt viele neue Features ein, z. B. neue Aktivitäten, Designerfunktionen und Workflowentwicklungsmodelle. Viele, aber nicht alle, die neuen Workflowfeatures, die in .NET Framework 4.5 eingeführt wurden, werden im neu gehosteten Workflow-Designer unterstützt. Weitere Informationen zu den neuen Features, die unterstützt werden, finden Sie unter Support für neue Workflow Foundation 4.5-Features im rehostierten Workflow-Designer. Weitere Informationen zum Migrieren von .NET Framework 3.0- und .NET Framework 3.5-Workflowanwendungen zur Verwendung der neuesten Version finden Sie unter Migrationsleitfaden. Dieser Artikel enthält eine Übersicht über die neuen Workflowfeatures, die in .NET Framework 4.5 eingeführt wurden.

Warnung

Die in .NET Framework 4.5 eingeführten neuen Windows Workflow Foundation-Features sind für Projekte, die auf frühere Versionen des Frameworks abzielen, nicht verfügbar. Wenn ein Projekt, das auf .NET Framework 4.5 abzielt, auf eine frühere Version des Frameworks umgeleitet wird, können mehrere Probleme auftreten.

  • C#-Ausdrücke werden im Designer durch den Nachrichtenwert ersetzt, der in XAML festgelegt wurde.
  • Viele Buildfehler treten auf, einschließlich des folgenden Fehlers.

Das Dateiformat ist nicht mit dem aktuellen Zielframework kompatibel. Um das Dateiformat zu konvertieren, speichern Sie die Datei explizit. Diese Fehlermeldung wird entfernt, nachdem Sie die Datei gespeichert und den Designer erneut geöffnet haben.

Workflowversionierung

.NET Framework 4.5 hat mehrere neue Versionsverwaltungsfeatures eingeführt, die auf der neuen WorkflowIdentity Klasse basieren. WorkflowIdentity stellt Workflowanwendungsautoren einen Mechanismus zum Zuordnen einer dauerhaften Workflowinstanz mit ihrer Definition bereit.

Aktivitäten

Die integrierte Aktivitätsbibliothek enthält neue Aktivitäten und neue Features für vorhandene Aktivitäten.

Nicht-Persistenz-Bereich

NoPersistScope ist eine neue Containeraktivität, die verhindert, dass ein Workflow beibehalten wird, wenn die untergeordneten Aktivitäten von NoPersistScope ausgeführt werden. Dies ist in Szenarien hilfreich, in denen der Workflow nicht beibehalten werden kann, z. B. wenn der Workflow computerspezifische Ressourcen verwendet, z. B. Dateihandles oder während Datenbanktransaktionen. Um zu verhindern, dass während der Ausführung einer Aktivität Persistenz auftritt, benötigte man eine benutzerdefinierte NativeActivity, die ein NoPersistHandle verwendete.

Neue Flussdiagrammfunktionen

Flussdiagramme werden für .NET Framework 4.5 aktualisiert und verfügen über die folgenden neuen Funktionen:

  • Die Eigenschaft von DisplayName, FlowSwitch<T> oder FlowDecision-Aktivität kann bearbeitet werden. Dadurch kann der Aktivitäts-Designer weitere Informationen zum Zweck der Aktivität anzeigen.

  • Flussdiagramme haben eine neue Eigenschaft genannt ValidateUnconnectedNodes; der Standardwert für diese Eigenschaft ist False. Wenn diese Eigenschaft auf True festgelegt ist, führen nicht verbundene Flussdiagrammknoten zu Validierungsfehlern.

Unterstützung für partielle Vertrauensstellung

Workflows in .NET Framework 4 erfordern eine voll vertrauenswürdige Anwendungsdomäne. In .NET Framework 4.5 können Workflows in einer teilweise vertrauenswürdigen Umgebung ausgeführt werden. In einer teilweise vertrauenswürdigen Umgebung können Komponenten von Drittanbietern verwendet werden, ohne ihnen vollständigen Zugriff auf die Ressourcen des Hosts zu gewähren. Einige Bedenken hinsichtlich der Ausführung von Workflows in teilweiser Vertrauensstellung sind wie folgt:

  1. Die Verwendung von Legacykomponenten (einschließlich Regeln), die in der Interop Aktivität enthalten sind, wird nicht unter teilweiser Vertrauensstellung unterstützt.

  2. Das Ausführen von Workflows in einem Modus teilweise Vertrauensstellung in WorkflowServiceHost wird nicht unterstützt.

  3. Das Beibehalten von Ausnahmen in einem teilweise vertrauenswürdigen Szenario ist eine potenzielle Sicherheitsbedrohung. Um das Beibehalten von Ausnahmen zu deaktivieren, muss dem Projekt eine Erweiterung des Typs ExceptionPersistenceExtension hinzugefügt werden, um das Beibehalten von Ausnahmen zu deaktivieren. Im folgenden Codebeispiel wird veranschaulicht, wie dieser Typ implementiert wird.

    public class ExceptionPersistenceExtension
    {
        public ExceptionPersistenceExtension()
        {
            this.PersistExceptions = false;
        }
        public bool PersistExceptions { get; set; }
    }
    

    Stellen Sie sicher, dass Ausnahmen in einem NoPersistScope verwendet werden, wenn sie nicht serialisiert werden sollen.

  4. Aktivitätsautoren sollten CacheMetadata überschreiben, um zu vermeiden, dass die Workflow-Laufzeit automatisch Reflexionen auf den Typ ausführt. Argumente und untergeordnete Aktivitäten müssen nicht null sein und Bind explizit aufgerufen werden. Weitere Informationen zum Überschreiben von CacheMetadata finden Sie unter Verfügbarmachen von Daten mit CacheMetadata. Darüber hinaus müssen Instanzen von Argumenten eines Typs, der internal oder privat ist, explizit in CacheMetadata erstellt werden, um zu vermeiden, dass sie durch Reflexion erstellt werden.

  5. Typen verwenden ISerializable oder SerializableAttribute nicht für die Serialisierung; Typen, die serialisiert werden sollen, müssen DataContractSerializer unterstützen.

  6. Ausdrücke, die LambdaValue<TResult> verwenden, erfordern RestrictedMemberAccess und funktionieren daher nicht unter teilweiser Vertrauensstellung. Workflows, die LambdaValue<TResult> verwenden, sollten so geändert werden, dass sie Ausdrücke durch Aktivitäten ersetzen, die von CodeActivity<TResult> abgeleitet sind. .

  7. Ausdrücke können nicht mit TextExpressionCompiler oder vom von Visual Basic gehosteten Compiler in teilweiser Vertrauensstellung kompiliert werden, aber zuvor kompilierte Ausdrücke können ausgeführt werden.

  8. Eine einzelne Assembly, die Level 2-Transparenz verwendet, kann nicht im vollständigen Vertrauen in .NET Framework 4, im vollständigen Vertrauen in .NET Framework 4.6.1 und im teilweisen Vertrauen in .NET Framework 4.6.1 verwendet werden.

Neue Designerfunktionen

Designersuche

Um größere Workflows besser zu verwalten, können Workflows jetzt nach Schlüsselwort durchsucht werden. Dieses Feature ist nur in Visual Studio verfügbar. Dieses Feature ist in einem neu gehosteten Designer nicht verfügbar. Es stehen zwei Arten von Suchvorgängen zur Verfügung:

  • Schnellsuche, initiiert mit STRG+F oder Bearbeiten, Suchen und Ersetzen, Schnellsuche.

  • Suchen In Dateien, initiiert mit STRG+UMSCHALT+F oder Bearbeiten, Suchen und Ersetzen, Suchen in Dateien.

Beachten Sie, dass "Ersetzen" nicht unterstützt wird.

Schnellsuche

Schlüsselwörter, die in Workflows durchsucht werden, entsprechen den folgenden Designerelementen:

  • Eigenschaften von Activity Objekten, FlowNode Objekten, State Objekten, Transition Objekten und anderen benutzerdefinierten Flusssteuerungselementen.

  • Variablen

  • Argumente

  • Ausdrücke

Die Schnellsuche wird auf der Struktur des ModelItem Designers ausgeführt. Die Schnellsuche sucht keine namespaces, die in der Workflowdefinition importiert wurden.

In Dateien suchen

Schlüsselwörter, die in Workflows durchsucht werden, entsprechen dem tatsächlichen Inhalt der Workflowdateien. Die Suchergebnisse werden im Ansichtsbereich "Ergebnisse suchen" in Visual Studio angezeigt. Durch Doppelklicken auf das Ergebniselement wird zu der Aktivität navigiert, die die Übereinstimmung im Workflow-Designer enthält.

Löschen eines Kontextmenüelements im Variablen- und Argument-Designer

In .NET Framework 4 konnten Variablen und Argumente nur mithilfe der Tastatur im Designer gelöscht werden. Ab .NET Framework 4.5 können Variablen und Argumente mithilfe des Kontextmenüs gelöscht werden.

Der folgende Screenshot zeigt das Kontextmenü des Variablen- und Argument-Designers.

Kontextmenü des Variablen- und Argument-Designers

Automatisches Umschließen mit Sequenz

Da ein Workflow oder bestimmte Containeraktivitäten (z. B. NoPersistScope) nur eine einzelne Hauptaktivität enthalten können, musste der Entwickler, um eine zweite Aktivität hinzuzufügen, zunächst die erste Aktivität löschen, dann eine Sequence-Aktivität hinzufügen und schließlich beide Aktivitäten zur Sequenzaktivität hinzufügen. Ab .NET Framework 4.5 wird beim Hinzufügen einer zweiten Aktivität zur Designeroberfläche automatisch eine Sequence Aktivität erstellt, um beide Aktivitäten umzuschließen.

Die folgende Bildschirmaufnahme zeigt eine WriteLine-Aktivität in Body von NoPersistScope.

Eine WriteLine-Aktivität im Hauptteil einer NoPersistScope-Aktivität.

Die folgende Bildschirmaufnahme zeigt die automatisch erstellte Sequence-Aktivität in Body, wenn eine zweite WriteLine-Komponente unterhalb der ersten abgelegt wird.

Eine automatisch erstellte Sequenz im Textkörper eines NoPersistScope-Elements.

Schwenkmodus

Um einen großen Workflow im Designer einfacher zu navigieren, kann der Verschiebungsmodus aktiviert werden, sodass der Entwickler klicken und ziehen kann, um den sichtbaren Teil des Workflows zu verschieben, anstatt die Bildlaufleisten zu verwenden. Die Schaltfläche zum Aktivieren des Schwenkmodus befindet sich rechts unten im Designer.

Der folgende Screenshot zeigt die Schaltfläche "Schwenken", die sich in der unteren rechten Ecke des Workflow-Designers befindet.

Die Schaltfläche „Schwenken“ ist im Workflow-Designer hervorgehoben.

Die mittlere Maustaste oder Leertaste kann auch zum Verschieben des Workflow-Designers verwendet werden.

Mehrfachauswahl

Mehrere Aktivitäten können gleichzeitig ausgewählt werden, indem sie entweder ein Rechteck um sie herum ziehen (wenn der Schwenkmodus nicht aktiviert ist), oder indem Sie STRG gedrückt halten und auf die gewünschten Aktivitäten einzeln klicken.

Mehrere ausgewählte Aktivitäten können auch im Designer gezogen und abgelegt und über das Kontextmenü bearbeitet werden.

Gliederungsansicht von Workflowelementen

Damit hierarchische Workflows leichter navigierbar sind, werden die Komponenten eines Workflows in einer Baumansicht dargestellt. Die Gliederungsansicht wird in der Dokumentgliederungsansicht angezeigt. Um diese Ansicht zu öffnen, wählen Sie im oberen Menü "Ansicht", "Andere Fenster", " Dokumentgliederung" aus, oder drücken Sie STRG W,U. Wenn Sie in der Gliederungsansicht auf einen Knoten klicken, wird zu der entsprechenden Aktivität im Workflow-Designer navigiert, und die Gliederungsansicht wird aktualisiert, um Aktivitäten anzuzeigen, die im Designer ausgewählt sind.

Der folgende Screenshot des abgeschlossenen Workflows aus dem Lernprogramm "Erste Schritte " zeigt die Gliederungsansicht mit einem sequenziellen Workflow.

Screenshot der Gliederungsansicht mit einem sequenziellen Workflow in Visual Studio.

C#-Ausdrücke

Vor .NET Framework 4.5 konnten alle Ausdrücke in Workflows nur in Visual Basic geschrieben werden. In .NET Framework 4.5 werden Visual Basic-Ausdrücke nur für Projekte verwendet, die mit Visual Basic erstellt wurden. Visual C#-Projekte verwenden jetzt C# für Ausdrücke. Ein voll funktionsfähiger C#-Ausdrucks-Editor wird bereitgestellt, der Funktionen wie Syntaxhervorhebung und IntelliSense verfügbar macht. C#-Workflowprojekte, die in früheren Versionen erstellt wurden, die Visual Basic-Ausdrücke verwenden, funktionieren weiterhin.

C#-Ausdrücke werden zur Entwurfszeit überprüft. Fehler in C#-Ausdrücken werden mit einer roten wellenförmigen Unterstreichung gekennzeichnet.

Weitere Informationen zu C#-Ausdrücken finden Sie unter C#-Ausdrücke.

Bessere Kontrolle über die Sichtbarkeit der Shellleiste und Headerelemente

In einem neu gehosteten Designer haben einige der standardmäßigen UI-Steuerelemente möglicherweise keine Bedeutung für einen bestimmten Workflow und können deaktiviert werden. In .NET Framework 4 wird diese Anpassung nur von der Shellleiste unten im Designer unterstützt. In .NET Framework 4.5 kann die Sichtbarkeit der Shellheaderelemente am oberen Rand des Designers angepasst werden, indem WorkflowShellHeaderItemsVisibility auf den entsprechenden ShellHeaderItemsVisibility-Wert festgelegt wird.

Automatisches Verbinden und Einfügen in Flussdiagramm- und Zustandsautomatworkflows

In .NET Framework 4 mussten Verbindungen zwischen Knoten in einem Flussdiagrammworkflow manuell hinzugefügt werden. In .NET Framework 4.5 verfügen Flussdiagramm- und Zustandsautomatenknoten über automatische Verbindungspunkte, die sichtbar werden, wenn eine Aktivität von der Toolbox auf die Designeroberfläche gezogen wird. Durch Ablegen einer Aktivität auf einem dieser Punkte wird die Aktivität automatisch zusammen mit der erforderlichen Verbindung hinzugefügt.

Der folgende Screenshot zeigt die Anschlusspunkte, die sichtbar werden, wenn eine Aktivität aus der Toolbox gezogen wird.

Flussdiagramm-Startknoten mit automatischen Verbindungspunkten

Aktivitäten können auch auf Verbindungen zwischen Flussdiagrammknoten und -zuständen gezogen werden, um den Knoten automatisch zwischen zwei anderen Knoten einzufügen. Der folgende Screenshot zeigt die hervorgehobene Verbindungslinie, in der Aktivitäten aus der Toolbox gezogen und gelöscht werden können.

AutoEinfügen-Handle zum Ablegen von Aktivitäten

Designeranmerkungen

Um die Entwicklung größerer Workflows zu erleichtern, unterstützt der Designer jetzt das Hinzufügen von Anmerkungen, um den Entwurfsprozess nachzuverfolgen. Anmerkungen können Aktivitäten, Zuständen, Flussdiagrammknoten, Variablen und Argumenten hinzugefügt werden. Der folgende Screenshot zeigt das Kontextmenü, das zum Hinzufügen von Anmerkungen zum Designer verwendet wird.

Screenshot eines Menüs zum Hinzufügen von Anmerkungen.

Debuggingzustände

In .NET Framework 4 konnten Nichtaktivitätselemente keine Debug-Haltepunkte unterstützen, da sie keine Ausführungseinheiten waren. Diese Version bietet einen Mechanismus zum Hinzufügen von Haltepunkten zu State Objekten. Wenn ein Haltepunkt auf einem State festgelegt ist, wird die Ausführung unterbrochen, wenn auf den Zustand umgeschaltet wird, bevor die Eintrittsaktivitäten oder Auslöser angesetzt werden.

Definieren und Verwenden von ActivityDelegate-Objekten im Designer

Aktivitäten in .NET Framework 4 verwendeten ActivityDelegate Objekte, um Ausführungspunkte verfügbar zu machen, in denen andere Teile des Workflows mit der Ausführung eines Workflows interagieren konnten, die Verwendung dieser Ausführungspunkte erforderte jedoch in der Regel eine faire Menge an Code. In dieser Version können Entwickler Aktivitätsdelegats mithilfe des Workflow-Designers definieren und nutzen. Weitere Informationen finden Sie unter So definieren und verwenden Sie Aktivitätsdelegaten im Workflow Designer.

Validierung zur Buildzeit

In .NET Framework 4 wurden Workflowüberprüfungsfehler während des Builds eines Workflowprojekts nicht als Buildfehler gezählt. Dies bedeutete, dass das Erstellen eines Workflowprojekts auch dann erfolgreich sein konnte, wenn Fehler bei der Workflowüberprüfung aufgetreten sind. In .NET Framework 4.5 führen Workflowüberprüfungsfehler dazu, dass der Build fehlschlägt.

Hintergrundvalidierung zur Entwurfszeit

In .NET Framework 4 wurden Workflows als Vordergrundprozess überprüft, wodurch die Benutzeroberfläche bei komplexen oder zeitaufwendigen Validierungsprozessen möglicherweise blockiert werden kann. Die Workflowüberprüfung erfolgt jetzt in einem Hintergrundthread, sodass die Benutzeroberfläche nicht blockiert wird.

Der Ansichtszustand wird an einem separaten Ort in XAML-Dateien gespeichert

In .NET Framework 4 werden die Ansichtsstatusinformationen für einen Workflow an vielen verschiedenen Speicherorten in der XAML-Datei gespeichert. Dies ist unannelich für Entwickler, die XAML direkt lesen oder Code schreiben möchten, um die Ansichtsstatusinformationen zu entfernen. In .NET Framework 4.5 werden die Ansichtsstatusinformationen in der XAML-Datei als separates Element in der XAML-Datei serialisiert. Entwickler können die Ansichtsstatusinformationen einer Aktivität ganz einfach suchen und bearbeiten oder den Ansichtszustand vollständig entfernen.

Erweiterbarkeit von Ausdrücken

In .NET Framework 4.5 bieten wir Entwicklern eine Möglichkeit, eigene Ausdrucks- und Ausdruckserstellungsfunktionen zu erstellen, die an den Workflow-Designer angeschlossen werden können.

Anmelden für Workflow 4.5-Features im neu gehosteten Designer

Um die Abwärtskompatibilität beizubehalten, sind einige neue Features, die in .NET Framework 4.5 enthalten sind, nicht standardmäßig im neu gehosteten Designer aktiviert. Dadurch wird sichergestellt, dass vorhandene Anwendungen, die den neu gehosteten Designer verwenden, nicht unterbrochen werden, indem Sie auf die neueste Version aktualisieren. Um neue Features im neu gehosteten Designer zu aktivieren, setzen Sie TargetFrameworkName entweder auf ".NET Framework 4.5" oder legen Sie einzelne Mitglieder von DesignerConfigurationService fest, um einzelne Features zu aktivieren.

Neue Workflowentwicklungsmodelle

Zusätzlich zu den Entwicklungsmodellen für sequenzielle oder Flussdiagramm-Workflows umfasst dieses Release Zustandsautomatworkflows und Vertrag zuerst-Workflowdienste.

Zustandsautomatworkflows

Zustandsmaschinen-Workflows wurden als Teil von .NET Framework 4, Version 4.0.1, im Microsoft .NET Framework 4 Platform Update 1 eingeführt. Dieses Update enthielt mehrere neue Klassen und Aktivitäten, mit denen Entwickler Zustandsautomaten-Workflows erstellen können. Diese Klassen und Aktivitäten wurden für .NET Framework 4.5 aktualisiert. Die Aktualisierungen umfassen:

  1. Festlegen von Haltepunkten für Zustände

  2. Die Möglichkeit zum Kopieren und Einfügen von Übergängen im Workflow-Designer

  3. Designerunterstützung für das Erstellen von freigegebenen Triggerübergängen

  4. Aktivitäten, die zum Erstellen von Zustandsautomatworkflows verwendet werden, darunter: StateMachine, State und Transition

Der folgende Screenshot zeigt den abgeschlossenen Zustandsautomaten-Workflow aus dem Leitfaden "Erste Schritte", Schritt "Wie erstelle ich einen Zustandsautomaten-Workflow".

Illustration, die den abgeschlossenen Zustand des Maschinen-Workflows zeigt.

Weitere Informationen zum Erstellen von Zustandsmaschinen-Workflows finden Sie unter Zustandsmaschinen-Workflows.

Vertragsorientierte Workflow-Entwicklung

Das Contract-First-Workflow-Entwicklungstool ermöglicht es dem Entwickler, zuerst einen Vertrag im Code zu gestalten und dann mit nur wenigen Klicks in Visual Studio automatisch eine Aktivitätsschablone in der Toolbox zu generieren, die für jeden Vorgang steht. Diese Aktivitäten werden dann verwendet, um einen Workflow zu erstellen, der die vom Vertrag definierten Vorgänge implementiert. Der Workflow-Designer überprüft den Workflowdienst, um sicherzustellen, dass diese Vorgänge implementiert werden und die Signatur des Workflows mit der Vertragssignatur übereinstimmt. Der Entwickler kann einen Workflowdienst auch einer Sammlung implementierter Verträge zuordnen. Weitere Informationen zur Entwicklung eines Workflow-Dienstes nach dem Vertrags-First-Ansatz finden Sie im Abschnitt „So erstellen Sie einen Workflowdienst, der einen vorhandenen Dienstvertrag nutzt“.