Freigeben über


Dieser Artikel wurde maschinell übersetzt.

Workflowdienste

Skalierbare, langfristige Workflows mit Windows Server AppFabric

Rafael Godinho

Downloaden des Codebeispiels

Geschäftsprozesse können eine Vielzahl von Anwendungsszenarien für die behandelt. Sie können menschliche Workflows, die Geschäftslogik durch Dienste offen gelegten Koordination von Darstellungsschichten und sogar die Integration von Anwendungen enthalten.

Obwohl diese Szenarios unterscheiden, haben erfolgreich von Geschäftsprozessen gemeinsam ein paar Dinge. Sie müssen einfach zu erstellen, verwenden und zu ändern. Skalierbare ändernden Anforderungen des Unternehmens werden müssen. Und Sie benötigen oft, eine Form der Protokollierung für Status, Kompatibilität und Debuggen.

Workflows sind ein gutes Beispiel für Geschäftsprozesse, die in Anwendungen festgeschrieben wurden haben. Diese verkörpern alle diese Elemente, die ich bereits erwähnt habe: menschliche Geschäftsanforderungen, die Geschäftslogik, die Koordination zwischen Menschen und Anwendungen, und die Möglichkeit, problemlos Daten eingeben und Status abrufen. Das ist viel für eine Anwendung ausführen und eine Menge an Code, zu.

Glücklicherweise bieten die Microsoft .NET Framework und Windows Server AppFabric die Tools, zum Erstellen, bereitstellen und Konfigurieren von verfolgbar, lang andauernde Workflowdienste. Sie sind wahrscheinlich bereits mit .NET Framework vertraut. Windows Server AppFabric ist eine Reihe von Erweiterungen für Windows-Server, die Zwischenspeicherung und Hostingdienste für Dienste, die auf Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) basieren.

In diesem Artikel werde ich Sie durch den Prozess der Erstellung einer einfachen skalierbare Workflowdienst mithilfe von WCF, WF und Windows Server AppFabric führen.

Erstellen einen Workflowdienst

So erstellen Sie einen Workflowdienst müssen Sie zwei Technologien kombiniert: WCF und WF. Diese Integration erfolgt nahtlos, dem Entwickler und ist fertig mit bestimmten messaging-Aktivitäten im Workflow WCF-Nachrichten empfangen. Der Workflow wird in einem Workflow-spezifische WCF-ServiceHost (WorkflowServiceHost) gehostet der WCF-Endpunkten für diese Nachrichten verfügbar macht. Zwischen die Nachrichtengruppe Aktivitäten können zwei davon zum Empfangen von Informationen ermöglichen den Workflow für das Annehmen von Nachrichten von externen Clients als Web Service-Aufrufe verwendet werden: die Aktivität Wareneingang und die Vorlage ReceiveAndSendReply.

Eine Aktivität Wareneingang wird verwendet, um Informationen zur Verarbeitung durch den Workflow zu erhalten. Empfängt er fast jede Art von Daten, z. B. integrierte Datentypen, Anwendung definierte Klassen oder sogar XML-serialisierbare Typen. Abbildung 1 zeigt ein Beispiel für eine Aktivität Wareneingang im Workflow-Designer.

image: A Receive Activity on the Workflow Designer

Abbildung 1 A empfangen Aktivität im Workflow-Designer

Diese Art von Aktivität verfügt über viele Eigenschaften, aber vier davon sind äußerst wichtig zu bedenken:

  • CanCreateInstance wird verwendet, um zu bestimmen, ob die Workflowlaufzeit eine neuen Workflowinstanz zum Verarbeiten der eingehenden Nachricht erstellen muss oder wenn Sie eine vorhandene wiederverwendet Korrelation Techniken verwenden. Korrelation später ausführlicher erörtert. Wahrscheinlich müssen Sie es auf die erste Aktivität Wareneingang des Workflows auf True festgelegt.
  • OperationName gibt den Dienstnamen Operation durch diese Aktivität Wareneingang implementiert.
  • Inhalt gibt die Daten, die vom Dienst empfangen werden. Dies ist ähnlich wie WCF Dienstparameter Vorgang Vertrag.
  • ServiceContractName wird verwendet, um Serviceverträge Gruppierung Dienstvorgänge innerhalb generierten Web Services Description Language (WSDL) erstellen.

Wenn allein verwendet wird, implementiert die Aktivität Wareneingang einer einseitigen Nachrichtenaustausch Muster aus, das wird verwendet, um Informationen von Clients erhalten, jedoch wird keine Antwort senden. Diese Art von Aktivität kann auch verwendet werden, um ein Anforderungs-Antwort-Muster implementieren, indem Sie eine Aktivität SendReply zuordnen.

Damit das Anforderungs-Antwort-Muster implementieren, fügt WF eine Option der Visual Studio-Toolbox ReceiveAndSendReply aufgerufen. Wenn im Workflow-Designer abgelegt wird, erstellt er automatisch ein Paar von vorkonfigurierten empfangen und SendReplyToReceive Aktivitäten innerhalb der Sequence-Aktivität (siehe Abbildung 2 ).

image: ReceiveAndSendReply on the Workflow Designer

Abbildung 2 ReceiveAndSendReply auf den Workflow-Designer

Die Idee hinter der ReceiveAndSendReply Vorlage besteht darin, zwischen den Aktionen empfangen und SendReplyToReceive verarbeiten. Es ist jedoch wichtig zu beachten, dass Persistenz zwischen Lieferung und SendReplyToReceive-Paar nicht zulässig ist. Eine Zone No-persist erstellt, und es dauert, bis beide Aktivitäten abgeschlossen wurden, d. h., wenn die Workflowinstanz inaktiv war, es wird nicht auch dann, wenn der Host so konfiguriert ist, Workflows erhalten bleiben, wenn Sie inaktiv werden beibehalten. Eine Aktivität versucht, die Workflowinstanz in der Zone No-persist explizit beibehalten, eine schwerwiegende Ausnahme wird ausgelöst, der Workflow abgebrochen und eine Ausnahme an den Aufrufer zurückgegeben wird.

Abgleichen der Anrufe

Ein Geschäftsprozess kann manchmal mehr als einen externen Anruf empfangen. In diesem Fall eine neue Workflowinstanz erstellt, auf den ersten Aufruf, seine Aktivitäten ausgeführt werden, und der Workflow im Leerlauf, warten auf nachfolgende Aufrufe bleibt. Bei ein später Aufruf vorgenommen wird, wird die Workflowinstanz im Leerlauf bleiben und weiterhin ausgeführt werden.

Auf diese Weise muss die Workflowlaufzeit eine Möglichkeit, mit Informationen, die auf spätere Aufrufe empfangen und Unterschieden zwischen der zuvor erstellten Workflowinstanzen, die Verarbeitung fortzusetzen, verfügen. Andernfalls könnte jeder Instanz, verlassen die gesamten Prozess Konsistenz gefährdet aufgerufen werden. Wird aufgerufen, Korrelation – Korrelieren von nachfolgende Aufrufe an den ausstehenden Workflow, mit dem der Anruf verbunden ist.

Eine Beziehung wird als eine XPath-Abfrage dargestellt, um bestimmte Daten in eine bestimmte Nachricht zu identifizieren. Sie können mithilfe einer Aktivität InitializeCorrelation initialisiert werden oder indem Sie einen Wert der CorrelationInitializers Eigenschaft eines bestimmten Aktivitäten wie z. B. hinzufügen: Empfangen Sie, SendReply, senden und ReceiveReply.

Diese Initialisierungsprozess erfolgen im Code oder mit den Workflow-Designer von Visual Studio 2010. Da Visual Studio einen Assistenten, um die XPath-Abfrage zu erstellen, ist die einfachere – und möglicherweise die vorzuziehen – wie für die meisten Entwickler.

Ein mögliches Szenario mit Korrelation ist ein Ausgabe-Bericht-Workflow. Zunächst wird ein Mitarbeiter die Daten aus Reisekostenabrechnungen gesendet. Zu einem späteren Zeitpunkt kann seinen Manager den Bericht und genehmigen oder verweigern die Ausgaben (siehe Abbildung 3 ).

image: Expense Report Sample Scenario

Abbildung 3 Expense Report Beispielszenario

In diesem Szenario wird die Korrelation erstellt, wenn der Workflow die Antwort an die Clientanwendung Mitarbeiter zurückgibt. So erstellen Sie eine Korrelation benötigen Sie einige Informationen Identifizieren von Kontext wie Ausgaben Berichts-ID (was wahrscheinlich eine eindeutige ID bereits ist). Die Workflowinstanz wird dann im Leerlauf, warten, bis des Managers zum Genehmigen oder Verweigern des Spesenberichts. Bei der Genehmigung durch den Manager Client-Anwendung aufgerufen wird, entspricht die Workflowlaufzeit die erhaltenen Ausgaben Berichts-ID mit der zuvor erstellten Workflowinstanz ein, um den Vorgang fortzusetzen.

Erstellen Sie eine Korrelation in Visual Studio 2010, zuerst wählen Sie im Workflowdesigner der Aktivität an aus, wohin die Korrelation initialisiert werden. Im vorliegenden Beispiel ist dies die Aktivität, die die Berichts-ID Ausgaben an den Client zurückgegeben. In der Aktivität SendReply legte ich CorrelationInitializers-Eigenschaft im Eigenschaftenfenster durch Klicken auf die Schaltfläche mit den Auslassungspunkten. Das Dialogfeld Add Korrelation Initialisierungen wird angezeigt (siehe Abbildung 4 ) im Feld, in dem Sie die Korrelation konfigurieren können.

image: Setting the XPath Query Correlation

Abbildung 4 Festlegen der XPath-Abfrage Korrelation

Drei Elemente müssen festgelegt werden: Das Handle Korrelation der Korrelationstyp und die XPath-Abfragen. Die Korrelation ist eine Variable, die Workflow-Runtime verwendet, um die Korrelationsdaten speichern und automatisch von Visual Studio erstellt wird.

Der nächste Schritt besteht darin, den Korrelationstyp festgelegt. .NET Framework verfügt über einige Arten von Korrelation, aber weil ich Abfrage Teil der Informationen, die mit dem Client ausgetauscht – also eine inhaltsbasierte Korrelation – das beste Option ist die Verwendung die Abfrage Korrelations-Initialisierung. Danach, können die XPath-Abfragen an die Ausgaben Berichts-ID festgelegt werden Beim Klicken auf den Pfeil, Visual Studio überprüft den Inhalt der Nachricht und zeigt mir eine Liste, wählen Sie die entsprechende Informationen.

Den Workflow fortgesetzt werden, nachdem die Ausgaben Genehmigung erfolgt, muss die Korrelation durch die entsprechende Aktivität Wareneingang verwendet werden. Dies geschieht durch Festlegen der Eigenschaft CorrelatesOn. Klicken Sie einfach auf das Auslassungszeichen neben der Eigenschaft im Eigenschaftenfenster, öffnen das Dialogfeld CorrelatesOn Definition im Feld (siehe Abbildung 5-). In diesem Dialogfeld die CorrelatesWith-Eigenschaft muss festgelegt werden, um dasselbe Handle verwendet, um die Korrelation für die Aktivität SendReplyToReceive initialisieren und die XPath-Abfragen-Eigenschaft muss festgelegt werden, um die gleichen Schlüssel und Spesenabrechnung ID auf die Berichtnachricht Genehmigung Ausgaben erhalten.

image: CorrelatesOn Definition

Abbildung 5 CorrelatesOn Definition

WF enthält eine Reihe von allgemeinen Aktivitäten Base Activity Library (BAL), von denen einige bereits verwendete zum Senden und Empfangen von Informationen hier genannt. Obwohl Sie sinnvoll sind, werden in einigen Fällen Aktivitäten mehr Geschäftsregeln benötigt. Basierend auf dem Szenario, die bisher erläuterten haben, stehen drei Aktivitäten, die für das Senden und die Genehmigung von Spesenabrechnungen benötigt: Erstellen Sie und genehmigen, und verweigern Sie Spesenabrechnung. Da alle diese Aktivitäten ziemlich ähnlich sind, werde ich nur den Code des CreateExpenseReportActivity anzeigen:

public sealed class CreateExpenseReportActivity 
  : CodeActivity<int> {
  public InArgument<decimal> Amount { get; set; }
  public InArgument<string> Description { get; set; }
  protected override int Execute(CodeActivityContext context) {
    Data.ExpenseReportManager expenseReportManager = 
      new Data.ExpenseReportManager();
    return expenseReportManager.CreateExpenseReport(
      Amount.Get(context), Description.Get(context));
  }
}

Die Aktivität der Ausgabenbetrag und die Beschreibung erhält, deklariert beide als InArgument. Die meisten die Schwerarbeit erfolgt in der Execute-Methode. Er greift auf eine Klasse, die das Entity Framework, Zugriff auf die Datenbank zu behandeln, und speichern die Berichtsinformationen Ausgaben verwendet und am anderen Ende Entity Framework die Ausgaben Berichts-ID zurückgibt. Weil ich nur zum Ausführen von CLR-Code und keine Interaktion mit der WF-Laufzeit sind, ist die einfachste Möglichkeit, eine Aktivität erstellen CodeActivity erben. Abbildung 6 , kann der gesamten Workflow eingesehen werden.

image: Complete Expense Report Workflow

Abbildung 6 abgeschlossen Expense Report Workflow

Den Workflowdienst hosten

Nachdem der Workflowdienst erstellt wurde, müssen Sie entscheiden, wo die Anwendung ausgeführt wird. Die herkömmliche Wahl wurde für die Ausführung auf eigene Hostumgebung, IIS oder Windows Process Activation Services (WAS). Eine weitere Option ist jedoch nutzen Windows Server AppFabric eine Verbesserung der Application Server-Rolle in Windows Server 2008 R2 Hosting, verwalten, schützen und Skalierung von Diensten mit WCF oder mit WF erstellt. Sie können auch die Windows Server-AppFabric auf PCs unter Windows Vista oder Windows 7 zum Entwickeln und Testen einsetzen.

Obwohl IIS und WAS bereits Dienst hostet unterstützen, bietet Windows Server AppFabric eine weitere nützliche und verwaltbare Umgebung, die WCF- und WF-Features wie z. B. Persistenz und der Überwachung mit dem IIS-Manager integriert.

Vereinfachte Workflow Persistence

Computer immer noch eine begrenzte Anzahl von Ressourcen, die Ihre Geschäftsprozesse zu verarbeiten, und es gibt keinen Grund, um Computerressourcen für Workflows im Leerlauf zu verschwenden. Für lang andauernde Prozesse möglicherweise keine Kontrolle über die Gesamtzeit ab dem Anfang des Prozesses zum Ende. Es Minuten, Stunden, Tage oder sogar mehr, dauern kann und Sie externe Entitäten wie andere Systeme oder Endbenutzer abhängig in den meisten Fällen Sie können nicht im Leerlauf einfach auf eine Antwort warten.

WF stellt ein System zur Beibehaltung eine dauerhafte Status einer Workflowinstanz-Aufzeichnung speichern kann, unabhängig vom Prozess oder Computer Informationen – in der Instanz speichert. WF 4 hat bereits einen SQL Server-Instanz Speicher außerhalb des Felds verwendet werden. Allerdings Da WF äußerst erweiterbar ist, konnte ich erstellen eigene Instanz Speicher um den Instanzstatus Workflow beizubehalten, wenn ich wollte. Sobald die Workflowinstanz im Leerlauf ist und gespeichert worden ist, können zum Beibehalten von Speicher- und CPU-Ressourcen entladen werden oder schließlich Es konnte verschoben werden von einem Knoten zum anderen in einer Serverfarm.

Windows Server AppFabric verfügt über eine einfache Möglichkeit zum Einrichten und Verwalten der Integration von WF Persistenz-Features. Der gesamte Prozess ist transparent für die Workflow-Runtime AppFabric, erweitern das standardmäßige WF Persistenz-Framework die Dauerhaftigkeit Vorgänge delegiert.

Der erste Schritt beim Konfigurieren der Dauerhaftigkeit besteht darin, die SQL Server-Datenbank mithilfe des Konfigurations-Assistenten von Windows Server AppFabric oder Windows PowerShell-Cmdlets einzurichten. Der Assistent kann die Persistenzdatenbank erstellen, falls er nicht vorhanden, oder erstellen Sie das Schema AppFabric. Die Datenbank bereits erstellt haben werden die anderen Schritte mit IIS-Manager ausgeführt.

Im IIS-Manager mit der rechten Maustaste des Knotens zu konfigurieren (Server, Website oder Anwendung), und wählen Sie verwalten WCF- und WF-Dienste | konfigurieren, um das Konfigurieren von WCF und WF für Anwendungs-Dialogfeld zu öffnen, klicken Sie dann auf Workflow Persistence (siehe Abbildung 7 ). Sie können sehen, dass Sie die Option zum Aktivieren oder Deaktivieren der Workflowpersistenz.

image: Configuring Workflow Persistence

Abbildung 7 Konfigurieren von Workflow Persistence

Sie haben auch die Möglichkeit, festzulegen, wie lange die Workflowlaufzeit dauert die Workflowinstanz aus dem Speicher entladen und in der Datenbank beibehalten, wenn der Workflow im Leerlauf ist. Der Standardwert ist 60 Sekunden. Wenn Sie den Wert auf 0 festgelegt, die es sofort beibehalten werden. Dies ist besonders wichtig für die Skalierung über ein System zum Lastenausgleich.

Workflow-Status

Manchmal kann ein Element mit Prozessen schief, die Interaktion mit externen Benutzern und Anwendungen. Aufgrund von der getrennten Art lang andauernde Prozesse kann auf diese Szenarios schlimmer sein. Wenn ein Problem auftritt, als Sie in der Regel eine Reihe von Protokollen, ermitteln, was passiert ist, analysieren müssen Entwickler zum Reproduzieren und die wichtigsten zum Beheben dieses Problems und das System zu halten. Wenn Sie WF verwenden, erhalten Sie bereits über diese Art der Protokollierung in das Framework integriert.

Genauso wie WF ist ein erweiterbares Framework zum Beibehalten von Instanzen im Leerlauf, es hat auch ein erweiterbares Framework um Einblicke in die Workflow-Ausführung zu ermöglichen. Dieses Framework heißt nachverfolgen, die instrumentiert transparent eines Workflows, wichtige Ereignisse aufzeichnen, während der Ausführung. Windows Server AppFabric verwendet diese Erweiterbarkeit, um den integrierten WF-Funktion für Bedarfsverursacher, Aufzeichnung von Ereignissen der Ausführung auf einem SQL Server-Datenbank zu verbessern.

Die Windows Server-AppFabric Überwachungskonfiguration ähnelt der Dauerhaftigkeit verwendet und über den Konfigurations-Assistenten von Windows Server AppFabric oder die Windows PowerShell-Cmdlets zugegriffen werden kann. Konfigurieren von WCF und WF für Application-Dialog, die weiter oben erläuterten klicken Sie auf "Überwachung". Sie können jetzt zum Aktivieren oder deaktivieren die Überwachung und auch auf der Ebene der Überwachung, wie in Abbildung 8 .

image: Enabling Tracking on Windows Server AppFabric

Abbildung 8 Aktivieren der Überwachung auf Windows Server AppFabric

Wählen Sie beim Konfigurieren der Überwachung in Windows Server AppFabric fünf Ebenen der Überwachung:

  • OFF hat den gleichen Effekt wie das Deaktivieren der Überwachung und eignet sich besonders in Szenarios, die minimalen Aufwand nachverfolgen.
  • Fehler kann nur die Sichtbarkeit auf nur kritische Ereignisse, wie Fehler und Warnungen. Dieser Modus eignet sich am besten für Hochleistungs-Szenarios, die nur minimale Fehlerprotokollierung.
  • Überwachen des Zustands ist die Standardeinstellung, die Überwachung der Ebene und enthält alle Daten, die auf der Ebene nur Fehler erfasst sowie einige zusätzliche Verarbeitungsschritte Daten.
  • End-to-End-Überwachung enthält alle Daten von Health Monitoring-Ebene sowie zusätzliche Informationen, um den gesamten Nachrichtenfluss zu rekonstruieren. In Szenarios wird verwendet, in denen ein Dienst einen anderen Dienst aufruft.
  • Problembehandlung, wie der Name schon sagt, ist die am häufigsten ausführlichen Ebene und ist hilfreich in Fällen, in denen eine Anwendung ist in einem fehlerhaften Zustand und korrigiert werden muss.

Skalierung den Workflowdienst

Da Windows Server AppFabric der Anwendungsserverfunktion von Windows Server erweitert, hochgradig skalierbare Infrastruktur von seinem Vorgänger erbt und auf einer Serverfarm hinter einem Netzwerk Lastenausgleich (NLB) ausgeführt werden können. Sie haben auch gesehen, er die Möglichkeit hat, beibehalten und Verfolgen von Workflowinstanzen bei Bedarf. Daher Windows Server AppFabric ist eine hervorragende Wahl zum Host langfristige Workflowprozesse und eine große Anzahl von Anforderungen von Clients zu unterstützen.

Ein Beispiel für eine skalierbare Verzeichnisdienstumgebung Workflow kann in Abbildung 9 eingesehen werden. Sie verfügt über zwei Instanzen von Windows Server AppFabric, beide ausgeführten Kopien der gleichen Workflowdefinition. NLB leitet Anforderungen an die verfügbare AppFabric-Instanz.

image: Workflows in a Scalable Environment

Abbildung 9 Workflows in einer skalierbaren Umgebung

Beim Zugriff eines Clients zuerst des Dienstes für eine Spesenabrechnung erstellen, leitet das System zum Lastenausgleich auf dem Szenario Ausgaben-Bericht die Anforderungen zu einer verfügbaren AppFabric für Windows Server-Instanz, die speichert der Kostendaten in der Datenbank, die generierte ID an den Client zurück und, da der Workflow im Leerlauf warten auf Genehmigung Ausgaben aus der Workflowlaufzeit wird die ausgeführte Instanz in der Datenbank weiterhin.

Zu einem späteren Zeitpunkt bei die Clientanwendung greift den genehmigen oder Verweigern des Spesenberichts der Netzwerklastenausgleich-Dienst leitet die Anforderung zu einer verfügbaren AppFabric für Windows Server-Instanz (Sie können einen anderen Server aus der ersten Dienstaufruf sein), und der Server die Anforderung korreliert und die Workflowinstanz aus der Persistenzdatenbank wiederhergestellt. Sie nun die Instanz im Arbeitsspeicher wird fortgesetzt, speichert die Genehmigung für die Datenbank und an den Client zurückgegeben werden, wenn es fertig ist.

Abschließende Hinweise

Wie Sie, die Verwendung von Workflowdienste mit Korrelation, gesehen haben ist Persistenz und der Überwachung des Lastenausgleichs-Umgebung ein leistungsfähiges Verfahren für diese Dienste in einer skalierbare Weise ausgeführt. Die Kombination dieser Features kann Operationen Produktivität, ermöglicht die proaktive Aktionen auf Dienste, und verteilen Workflows auf Threads, Prozesse und sogar Computer erhöhen. Dies ermöglicht es Entwicklern, eine vollständig skalierbare Lösung erstellen, die auf einem einzelnen Computer ausgeführt werden kann, oder sogar große Serverfarmen – mit keine Sorge über die Komplexität der Infrastruktur.

Weitere Informationen zum Entwerfen von Workflows mit WCF und WF unbedingt “ Visual Design des Workflows mit WCF und WF 4, ” Leon-Welicki Artikel aus der Ausgabe Mai 2010 MSDN Magazin (msdn.microsoft.com/magazine/ff646977 ) zu lesen. Und eine tiefere Erörterung lang andauernde Prozesse und Workflowpersistenz finden Sie Michael Kennedy des Artikel “ Web-Anwendungen, Support lang andauernde Vorgänge, ” aus der Ausgabe Januar 2009 (msdn.microsoft.com/magazine/dd296718 ).

Weitere Informationen zu Windows Server AppFabric finden Sie im Windows Server-Entwicklercenter msdn.microsoft.com/windowsserver/ee695849-.

Rafael Godinho is an ISV developer evangelist at Microsoft Brazil helping local partners adopt Microsoft technology. Godinho erhalten Sie über seinen Blog unter blogs.msdn.com/rafaelgodinho-.

Dank an die folgenden technischen Experten für die Überprüfung der in diesem Artikel: Dave CliffeRon Jacobs -und Leon Welicki