Freigeben über


Spezifische Merkmale der Windows Workflow Foundation

.NET Framework 4 fügt Windows Workflow Foundation eine Reihe von Features hinzu. Dieses Dokument beschreibt eine Reihe der neuen Features und enthält Details zu Szenarien, in denen sie nützlich sein können.

Nachrichtenaktivitäten

Die Messagingaktivitäten (Receive, SendReply, Send, ReceiveReply) werden verwendet, um WCF-Nachrichten von Ihrem Workflow zu senden und zu empfangen. Receive und SendReply Aktivitäten werden verwendet, um einen Windows Communication Foundation (WCF)-Dienstvorgang zu erstellen, der über WSDL genauso verfügbar gemacht wird wie Standard-WCF-Webdienste. Send und ReceiveReply werden verwendet, um einen Webdienst zu nutzen, der einem WCF ChannelFactoryähnelt. Für Workflow Foundation ist auch eine Add Service Reference-Erfahrung vorhanden, die vorkonfigurierte Aktivitäten generiert.

Erste Schritte mit Messagingaktivitäten

  • Erstellen Sie in Visual Studio 2012 ein WCF-Workflowdienstanwendungsprojekt. Das Paar Receive und SendReply wird auf dem Canvas platziert.

  • Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie "Dienstverweis hinzufügen" aus. Zeigen Sie auf einen vorhandenen Webdienst WSDL, und klicken Sie auf "OK". Erstellen Sie Ihr Projekt, um die generierten Aktivitäten (implementiert mithilfe Send und ReceiveReply) in Ihrer Toolbox anzuzeigen.

  • Dokumentation zu Workflowdiensten

Beispielszenario für Messagingaktivitäten

Ein BestPriceFinder Service ruft mehrere Flugliniendienste auf, um den besten Ticketpreis für eine bestimmte Route zu finden. Wenn Sie dieses Szenario implementieren, müssen Sie die Nachrichtenaktivitäten verwenden, um die Preisanforderung zu erhalten, die Preise von den Back-End-Diensten abzurufen und auf die Preisanfrage mit dem besten Preis zu antworten. Dies erfordert auch, dass Sie andere vordefinierte Aktivitäten verwenden, um die Geschäftslogik für die Berechnung des besten Preises zu erstellen.

WorkflowServiceHost

Das WorkflowServiceHost ist der sofort einsatzbereite Workflowhost, der mehrere Instanzen, Konfiguration, und WCF-Messaging unterstützt (obwohl die Workflows nicht zwingend Messaging nutzen müssen, um gehostet zu werden). Außerdem wird durch einen Satz von Dienstverhalten die Integration von Persistenz, Nachverfolgung und Instanzsteuerung bereitgestellt. Genau wie WCF ServiceHost kann WorkflowServiceHost selbst in einer Konsole-/WinForms-/WPF-Anwendung oder einem Windows-Dienst gehostet werden oder als XAMLX-Datei in IIS oder WAS webgehostet werden.

Erste Schritte mit dem Workflow-Diensthost

WorkflowServiceHost-Szenario

Ein BestPriceFinder-Service ruft mehrere Flugdienste auf, um den besten Ticketpreis für eine bestimmte Route zu finden. Wenn Sie dieses Szenario implementieren, müssen Sie den Workflow hosten in WorkflowServiceHost. Es würde auch die Nachrichtenaktivitäten verwenden, um die Preisanfrage zu erhalten, die Preise von den Back-End-Diensten abzurufen und auf die Preisanfrage mit dem besten Preis zu antworten.

Korrelation

Eine Korrelation ist eines von zwei Dingen:

  • Eine Möglichkeit zum Gruppieren von Nachrichten; d. h. die Beziehung zwischen einer Anforderungsnachricht und deren Antwort.

  • Eine Möglichkeit zum Zuordnen eines Datenteils zu einer Dienstinstanz

Erste Schritte

  • Um mit der Korrelation zu beginnen, erstellen Sie ein neues Projekt in Visual Studio. Erstellen Sie eine Variable vom Typ CorrelationHandle.

  • Ein Beispiel für die Korrelation, die zum Gruppieren von Nachrichten verwendet wird, ist eine Request-Reply Korrelation, die Nachrichten zusammen gruppiert.

    • Klicken Sie für eine Receive-Aktivität auf die CorrelationInitializers-Eigenschaft, und fügen Sie mithilfe der oben im ersten Schritt erstellten CorrelationHandle-Variablen ein RequestReplyCorrelationInitializer-Element hinzu.

    • Erstellen Sie eine SendReply Aktivität, indem Sie mit der rechten Maustaste auf die Receive Schaltfläche "SendReply erstellen" klicken. Fügen Sie ihn nach der Receive Aktivität in Ihren Workflow ein.

  • Ein Beispiel für die Zuordnung eines Datenteils zu einer Dienstinstanz ist eine inhaltsbasierte Korrelation, die eine Datenmenge (z. B. eine Auftrags-ID) einer bestimmten Workflowinstanz zuordnet.

    • Klicken Sie bei jeder Nachrichtenaustauschaktivität auf die CorrelationInitializers-Eigenschaft, und fügen Sie mithilfe der oben erstellten QueryCorrelationInitializer-Variablen eine CorrelationHandle hinzu. Doppelklicken Sie im Dropdownmenü auf die gewünschte Eigenschaft der Nachricht (z. B. OrderID). Legen Sie die CorrelatesWith Eigenschaft auf die CorrelationHandle oben verwendete Variable fest.
  • Konzeptuelle Korrelationsdokumentation

Korrelationsszenario

Ein Workflow zur Auftragsverarbeitung wird verwendet, um die Erstellung neuer Aufträge zu verarbeiten und vorhandene Bestellungen zu aktualisieren, die gerade verarbeitet werden. Wenn Sie dieses Szenario implementieren, müssen Sie den Workflow in WorkflowServiceHost hosten und die Messagingaktivitäten verwenden. Es wäre auch eine Korrelation auf der Grundlage der orderId erforderlich, um sicherzustellen, dass Aktualisierungen am richtigen Workflow vorgenommen werden.

Vereinfachte Konfiguration

Das WCF-Konfigurationsschema ist komplex und bietet Benutzern viele schwer zu findende Features. In .NET Framework 4.6.1 haben wir uns darauf konzentriert, WCF-Benutzer bei der Konfiguration ihrer Dienste mit den folgenden Features zu unterstützen:

  • Entfernen der Notwendigkeit einer expliziten Konfiguration pro Dienst. Wenn Sie keine Dienstelemente< für Ihren Dienst konfigurieren >und Ihr Dienst keinen Endpunkt programmgesteuert definiert, werden ihrem Dienst automatisch eine Gruppe von Endpunkten hinzugefügt, eine pro Dienstbasisadresse und pro Vertrag, die von Ihrem Dienst implementiert wird.

  • Ermöglicht es dem Benutzer, Standardwerte für WCF-Bindungen und -Verhaltensweisen zu definieren, die ohne explizite Konfiguration auf Dienste angewendet werden.

  • Standardendpunkte definieren wiederverwendbare vorkonfigurierte Endpunkte, die feste Werte für mindestens eine der Endpunkteigenschaften (Adresse, Bindung und Vertrag) aufweisen und das Definieren benutzerdefinierter Eigenschaften zulassen.

  • Schließlich erlaubt das ConfigurationChannelFactory<TChannel> die zentrale Verwaltung der WCF-Clientkonfiguration, was in Szenarien nützlich ist, in denen die Konfiguration ausgewählt oder geändert wird, nachdem die Anwendungsdomäne geladen wurde.

Erste Schritte

Vereinfachte Konfigurationsszenarien

  • Ein erfahrener ASMX-Entwickler möchte mit der Verwendung von WCF beginnen. WCF scheint jedoch zu kompliziert zu sein! Was sind alle Informationen, die ich in eine Konfigurationsdatei schreiben muss? In .NET 4 können Sie sogar entscheiden, überhaupt keine Konfigurationsdatei zu haben.

  • Eine vorhandene Gruppe von WCF-Diensten ist sehr schwierig zu konfigurieren und zu verwalten. Die Konfigurationsdatei enthält Tausende von Xml-Codezeilen, die extrem gefährlich sind, um zu berühren. Hilfe ist erforderlich, um die Menge an Code auf etwas besser verwaltbares Zu reduzieren.

Datenkontraktauflöser

In .NET Framework 3.5 gab es einige Einschränkungen beim Entwurf bekannter Typen:

  • Das dynamische Hinzufügen bekannter Typen während der Serialisierung oder Deserialisierung war nicht möglich.

  • Serialisierer konnten keine unbekannten xsi:type-Informationen verarbeiten.

  • Benutzer konnten nicht angeben, welche xsi:type-Informationen erscheinen sollten, um z. B. die Serialisierungsinstanz zu verkleinern.

Der DataContractResolver löst diese Probleme in .NET Framework 4.5.

Erste Schritte

Datenvertragsresolver-Szenarien

  • Vermeiden Sie es, zehn KnownTypeAttribute Objekte in einem Dienst zu deklarieren.

  • Verringern der Größe des XML-Blobs.

Flussdiagramm

Flussdiagramm ist ein bekanntes Paradigma zur visuellen Darstellung von Domänenproblemen. Es handelt sich um eine neue Steuerungsflussart, die wir in .NET Framework 4 einführen. Ein Kernmerkmal des Flussdiagramms ist, dass immer nur eine Aktivität ausgeführt wird. In Flussdiagrammen können Schleifen und alternative Ergebnisse ausgedrückt werden, aber nicht die gleichzeitige Ausführung mehrerer Knoten.

Erste Schritte

Flussdiagrammszenarien

Eine Flussdiagrammaktivität kann verwendet werden, um ein Erratenspiel zu implementieren. Das Erratenspiel ist sehr einfach: Der Computer wählt eine Zufallszahl aus, und der Spieler muss diese Zahl erraten. Wenn der Spieler jeden Schätzwert einreicht, zeigt der Computer einen Hinweis an (d. h. "versuchen Sie es mit einer niedrigeren Zahl"). Wenn der Spieler die Zahl in weniger als 7 Versuchen findet, erhält er einen besonderen Glückwunsch vom Computer. Dieses Spiel kann mit einer Kombination der folgenden verfahrenstechnischen Aktivitäten implementiert werden:

Verfahrensaktivitäten (Sequence, If, ForEach, Switch, Assign, DoWhile, While)

Verfahrensaktivitäten bieten einen Mechanismus zum Modellieren des sequenziellen Steuerungsflusses mithilfe von Konzepten, die Programmierern vertraut sind. Diese Aktivitäten ermöglichen traditionell strukturierte Programmiersprachenkonstrukte und stellen ggf. die Sprachparität mit gängigen Prozedursprachen wie C# und Visual Basic bereit.

Erste Schritte

Verfahrensaktivitätsszenarien

  • Parallel: Ein Intranetdokumentverwaltungssystem verfügt über einen Dokumentgenehmigungsworkflow. Dokumente müssen von Personen in mehreren Abteilungen genehmigt werden, bevor sie im Intranet veröffentlicht werden können. Es gibt keine festgelegte Reihenfolge für die Genehmigungen; sie können jederzeit erfolgen, während sich das Dokument in der Phase "Genehmigung ausstehend" befindet. Wenn ein Benutzer ein Dokument zur Überprüfung übermittelt, muss es vom direkten Vorgesetzten, dem Intranetadministrator und dem internen Kommunikationsmanager genehmigt werden.

  • ParallelForEach<T>: Eine WF-Anwendung verwaltet Unternehmenskäufe innerhalb eines großen Unternehmens. Die Unternehmensregeln diktieren, dass vor der Planung eines Einkaufsvorgangs die Bewertungen von drei verschiedenen Anbietern erforderlich sind. Ein Mitarbeiter aus der Einkaufsabteilung wählt drei Lieferanten aus der Lieferantenliste des Unternehmens aus. Nachdem diese Lieferanten ausgewählt und benachrichtigt wurden, wartet das Unternehmen auf ihre wirtschaftlichen Vorschläge. Die Vorschläge können in beliebiger Reihenfolge erfolgen. Zum Implementieren dieses Szenarios in WF wird eine ParallelForEach<T>-Aktivität verwendet, die die Auflistung von Anbietern durchläuft und Angebote anfordert. Nachdem alle Angebote gesammelt wurden, wird das beste ausgewählt und angezeigt.

InvokeMethod

Die InvokeMethod-Aktivität erlaubt den Aufruf öffentlicher Methoden in Objekten oder Typen im Gültigkeitsbereich. Sie unterstützt das Aufrufen von Instanzen und statischen Methoden mit oder ohne Parameter (einschließlich Parameterarrays) und generischen Methoden. Sie ermöglicht außerdem die synchrone und asynchrone Ausführung der Methode.

Erste Schritte

  • Erstellen Sie in Visual Studio 2012 eine Workflowkonsolenanwendung. Fügen Sie eine InvokeMethod Aktivität im Workflow-Designer hinzu, und konfigurieren Sie statische und Instanzmethoden darauf.

  • Designerdokumentation: InvokeMethod-Aktivitäts-Designer

InvokeMethod-Szenarien

  • Eine Methode innerhalb eines Objekts, das im Geltungsbereich liegt, muss aufgerufen werden. Beispielsweise muss einem Wörterbuch ein Wert hinzugefügt werden. Die Add-Methode der Instanz des Wörterbuchs wird aufgerufen, und der Schlüssel und der Wert werden bereitgestellt.

  • Für ein Legacy-CLR-Objekt muss eine Methode aufgerufen werden. Anstatt eine benutzerdefinierte Aktivität zu erstellen, um den Aufruf dieser Legacyklasse zu umschließen, wenn es sich während der Workflowausführung im Gültigkeitsbereich befindet, kann InvokeMethod verwendet werden.

Fehlerbehandlungsaktivitäten

Die TryCatch Aktivität bietet einen Mechanismus zum Abfangen von Ausnahmen, die während der Ausführung einer Gruppe von enthaltenen Aktivitäten auftreten (ähnlich dem Try/Catch-Konstrukt in C# und Visual Basic). TryCatch stellt die Ausnahmebehandlung auf Workflowebene bereit. Wenn eine unbehandelte Ausnahme ausgelöst wird, wird der Workflow abgebrochen, und der Finally-Block wird nicht ausgeführt. Dieses Verhalten ist mit C# konsistent.

Erste Schritte

Fehlerbehandlungsszenarien

Eine Reihe von Aktivitäten muss ausgeführt werden, und bestimmte Logik muss ausgeführt werden, wenn ein Fehler auftritt. Wenn während dieser Fehlerbehandlungslogik festgestellt wird, dass der Fehler nicht wiederhergestellt werden kann, wird die Ausnahme erneut geworfen, und die übergeordnete Aktivität (oder der Host) kümmert sich um das Problem.

Aktivität auswählen

Die Pick Aktivität bietet ereignisbasierte Steuerungsflussmodellierung in WF. Pick enthält zahlreiche Verzweigungen, wobei jede Verzweigung vor ihrer Ausführung auf ein bestimmtes Ereignis wartet. In diesem Setup verhält sich ein Pick ähnlich wie ein Switch<T>, wobei die Aktivität nur eines der Ereignisse ausführt, denen sie zuhört. Jeder Branch ist ereignisgesteuert, und das Ereignis, das zuerst auftritt, führt zuerst den entsprechende Branch aus. Alle anderen Verzweigungen werden abgebrochen, und die Überwachung der Ereignisse wird beendet.

Erste Schritte

Szenario auswählen

Ein Benutzer muss zur Eingabe aufgefordert werden. Unter normalen Umständen würde der Entwickler eine Methode wie ReadLine aufrufen, um eine Benutzereingabe abzufragen. Das Problem mit diesem Setup besteht darin, dass das Programm wartet, bis der Benutzer etwas eingibt. In diesem Szenario ist ein Timeout erforderlich, um eine blockierende Tätigkeit zu entblocken. Ein häufiges Szenario ist ein Szenario, bei dem eine Aufgabe innerhalb einer bestimmten Zeitdauer abgeschlossen werden muss. Das Umsetzen eines Timeouts für eine blockierende Aktivität ist ein Szenario, bei dem eine Auswahl sehr nützlich ist.

WCF-Routingdienst

Der Routingdienst ist ein generischer Softwarerouter, mit dem Sie steuern können, wie WCF-Nachrichten zwischen Ihren Clients und Diensten fließen. Der Routingdienst ermöglicht es Ihnen, Ihre Clients von Ihren Diensten zu entkoppeln, was Ihnen viel mehr Freiheit in Bezug auf die Konfigurationen bietet, die Sie unterstützen können, und die Flexibilität, die Sie haben, wenn Sie überlegen, wie Sie Ihre Dienste hosten. In .NET Framework 3.5 wurden Clients und Dienste eng gekoppelt; ein Kunde musste sich über alle Dienste informieren, mit denen er sprechen musste und wo er sich befand. Darüber hinaus hatte WCF in .NET Framework 3.5 die folgenden Einschränkungen:

  • Fehlerbehandlung war komplex, da diese Logik in den Client hartcodiert werden musste.

  • Clients und Dienste mussten immer dieselben Bindungen verwenden.

  • Dienste wurden selten gut berücksichtigt: Es ist einfacher, den Kunden mit einem einzigen Dienst sprechen zu lassen, der alle Anforderungen erfüllt, anstatt zwischen mehreren Diensten wählen zu müssen.

Der Routingdienst in .NET 4 wurde entwickelt, um diese Probleme einfacher zu lösen. Der neue Routingdienst verfügt über die folgenden Features:

  1. Inhaltsbasiertes Routing (MessageFilter Objekte untersuchen eine Nachricht, um zu bestimmen, wo sie gesendet werden soll.)

  2. Protokollbrücken (Transport und Nachrichtenübermittlung)

  3. Fehlerbehandlung (der Router fängt Kommunikationsausnahmen ab und führt ein Failover zu Sicherungsendpunkten aus)

  4. Dynamische Aktualisierung (im Arbeitsspeicher) von MessageFilterTable<TFilterData> und Routingkonfiguration.

Erste Schritte

  1. Dokumentation: Routing

  2. Beispiele: Routingdienste [WCF-Beispiele]

  3. Blog: Regeln für Routing!

Routingszenarien

Der Routingdienst ist in den folgenden Szenarien nützlich:

  • Kunden können mit mehreren Diensten sprechen, ohne sie direkt adressieren zu müssen.

  • Clients können zusätzliche Logik für eine Clientanforderung ausführen, um zu bestimmen, wo sie weitergeleitet werden soll.

  • Dekompilieren Sie die Vorgänge, die ein Client ausführt, in mehrere Dienstimplementierungen, ohne den Client umzugestalten.

  • Clients und Dienste können unterschiedliche Bindungen mit verschiedenen Sicherheitseinstellungen verwenden.

  • Clients können befähigt werden, robuster gegen Fehler oder die Nichtverfügbarkeit von Diensten zu sein.

WCF-Suche

WCF Discovery ist eine Frameworktechnologie, mit der Sie einen Ermittlungsmechanismus in Ihre Anwendungsinfrastruktur integrieren können. Sie können dies verwenden, um Ihren Dienst auffindbar zu machen und Ihre Clients so zu konfigurieren, dass sie nach Diensten suchen. Clients müssen nicht mehr mit einem Endpunkt hartcodiert werden, sodass die Anwendung stabiler und fehlertolerant wird. Discovery ist die perfekte Plattform, um Funktionen für die automatische Konfiguration in Ihre Anwendung zu integrieren.

Das Produkt basiert auf dem WS-Discovery Standard. Es wurde entwickelt, um interoperabel, erweiterbar und generisch zu sein. Das Produkt unterstützt zwei Betriebsmodi:

  1. Verwaltet: Wenn im Netzwerk eine Entität vorhanden ist, die über vorhandene Dienste informiert ist, fragen Clients sie direkt nach Informationen ab. Dies entspricht Active Directory.

  2. Ad-hoc: Wo Clients Multicastnachrichten verwenden, um Dienste zu suchen.

Darüber hinaus sind Ermittlungsmeldungen netzwerkprotokollagnostisch; Sie können diese auf jedem Protokoll verwenden, das die Modusanforderungen unterstützt. Ein Beispiel dafür ist, dass Entdeckungs-Multicastnachrichten über den UDP-Kanal oder ein anderes beliebiges Netzwerk gesendet werden können, das Multicastnachrichten unterstützt. Mit diesen Designpunkten, kombiniert mit Featureflexibilität, können Sie die Ermittlung speziell an Ihre Lösung anpassen.

Erste Schritte

Entdeckungsszenarien

Ein Entwickler möchte keine hartcodierten Endpunkte schreiben, da es unbekannt ist, wann mein Dienst verfügbar ist. Stattdessen möchte der Entwickler zur Laufzeit einen Dienst auswählen. Zwischen den Komponenten in der Anwendung sind mehr Entkoppelung, Robustheit und automatische Konfiguration erforderlich.

Nachverfolgung

Die Workflownachverfolgung bietet Einblicke in die Ausführung einer Workflowinstanz. Die Nachverfolgungsereignisse werden von einem Workflow auf Workflowinstanzebene ausgegeben, wenn im Workflow Aktivitäten ausgeführt werden. Dem Workflowhost muss eine Workflownachverfolgungskomponente hinzugefügt werden, um Nachverfolgungsdatensätze zu abonnieren. Die Nachverfolgungsdatensätze werden mithilfe eines Nachverfolgungsprofils gefiltert. .NET Framework stellt einen ETW-Teilnehmer (Ereignisablaufverfolgung für Windows) bereit, und ein grundlegendes Profil wird in der machine.config-Datei installiert.

Erste Schritte

  1. Erstellen Sie in Visual Studio 2010 ein WCF-Workflowdienstanwendungsprojekt. Um mit der Projekterstellung zu beginnen, werden Receive und SendReply auf dem Canvas platziert.

  2. Öffnen Sie die Datei "web.config", und fügen Sie ein ETW-Nachverfolgungsverhalten ohne Profil hinzu.

    1. Das Standardprofil wird verwendet.

    2. Öffnen Sie die Ereignisanzeige, und aktivieren Sie den Analysekanal im folgenden Knoten: Ereignisanzeige, Anwendungen und Dienstprotokolle, Microsoft, Windows, Application Server-Applications. Klicken Sie mit der rechten Maustaste auf Analytisch, und wählen Sie Protokoll aktivieren aus.

    3. Führen Sie den Workflowdienst aus.

    4. Beobachten Sie die Workflowverfolgungsereignisse in der Ereignisanzeige.

  3. Beispiele: Nachverfolgen

  4. Konzeptionelle Dokumentation: Workflownachverfolgung und Ablaufverfolgung

SQL-Workflowinstanzspeicher

Dies SqlWorkflowInstanceStore ist eine SQL Server-basierte Implementierung eines Instanzspeichers. Ein Instanzspeicher speichert den Status einer ausgeführten Instanz zusammen mit allen Daten, die zum Laden und Fortsetzen dieser Instanz erforderlich sind. Der Diensthost weist den Instanzspeicher an, den Instanzstatus zu speichern, wenn der Workflow beibehalten wird, und weist den Instanzspeicher an, den Instanzstatus zu laden, wenn eine Nachricht für diese Instanz eingeht oder eine Verzögerungsaktivität abläuft.

Erste Schritte

  1. Erstellen Sie in Visual Studio 2012 einen Workflow, der eine implizite oder explizite Persist Aktivität enthält. Fügen Sie dem Workflowdiensthost das SqlWorkflowInstanceStore-Verhalten hinzu. Dies kann im Code oder in der Anwendungskonfigurationsdatei erfolgen.

  2. Beispiele: Persistenz

  3. Konzeptionelle Dokumentation: SQL-Workflowinstanzspeicher.