Angehaltene Instanzverwaltung

Das Beispiel SuspendedInstanceManagement zeigt, wie Workflowinstanzen verwaltet werden können, die angehalten wurden. Die Standardaktion für WorkflowUnhandledExceptionBehavior ist AbandonAndSuspend. Dies bedeutet, dass nicht behandelte Ausnahmen, die von einer Workflowinstanz ausgelöst werden, die im WorkflowServiceHost gehostet wird, standardmäßig dazu führen, dass die Instanz aus dem Speicher verworfen (abgebrochen) und dass die dauerhafte/persistente Version der Instanz als angehalten markiert wird. Eine angehaltene Workflowinstanz kann erst ausgeführt werden, nachdem sie fortgesetzt wurde.

Das Beispiel zeigt, wie ein Befehlszeilenprogramm implementiert werden kann, um angehaltene Instanzen abzufragen, und wie dem Benutzer die Option gegeben wird, um die Instanz fortzusetzen oder zu beenden. In diesem Beispiel löst ein Workflowdienst absichtlich eine Ausnahme aus, wodurch verursacht wird, dass er angehalten wird. Das Befehlszeilenprogramm kann dann verwendet werden, um die Instanz abzufragen und anschließend die Instanz fortzusetzen oder zu beenden.

Zeigt

WorkflowServiceHost mit WorkflowUnhandledExceptionBehavior und WorkflowControlEndpoint in Windows Workflow Foundation (WF).

Diskussion (Discussion)

Das in diesem Beispiel implementierte Befehlszeilenhilfsprogramm ist speziell auf die SQL-Instanzspeicherimplementierung ausgerichtet, die in .NET Framework 4.6.1 enthalten ist. Wenn Sie über eine benutzerdefinierte Implementierung des Instanzspeichers verfügen, können Sie dieses Hilfsprogramm anpassen, indem Sie die WorkflowInstanceCommand-Implementierungen im Beispiel durch Implementierungen speziell für Ihren Instanzspeicher ersetzen.

Die bereitgestellte Implementierung führt SQL-Befehle direkt für den SQL-Instanzspeicher aus, um angehaltene Instanzen direkt aufzuführen, und diese basiert auf einem WorkflowControlEndpoint, der dem WorkflowServiceHost hinzugefügt wurde, um die Instanzen fortzusetzen oder zu beenden.

So können Sie das Beispiel einrichten, erstellen und ausführen

  1. Dieses Beispiel erfordert, dass die folgenden Windows-Komponenten aktiviert sind:

    1. Microsoft Message Queues (MSMQ) Server

    2. SQL Server Express

  2. Richten Sie die SQL Server-Datenbank ein.

    1. Führen Sie an einer Visual Studio-Eingabeaufforderung den Befehl „setup.cmd“ aus dem Beispielverzeichnis „SuspendedInstanceManagement“ aus. Dies bewirkt Folgendes:

      1. Erstellung einer Persistenzdatenbank mit SQL Server Express. Wenn die Persistenzdatenbank bereits vorhanden ist, dann wird diese gelöscht und neu erstellt.

      2. Einrichten der Datenbank für Persistenz.

      3. Fügt IIS der InstanceStoreUsers-Rolle, die beim Einrichten der Datenbank für Persistenz definiert wurde, APPPOOL\DefaultAppPool und NT AUTHORITY\Network Service hinzu.

  3. Einrichten der Dienstwarteschlange.

    1. Klicken Sie in Visual Studio mit der rechten Maustaste auf das Projekt SampleWorkflowApp, und klicken Sie auf Als Startprojekt festlegen.

    2. Kompilieren Sie die SampleWorkflowApp, und führen Sie sie aus, indem Sie F5 drücken. Dadurch wird die erforderliche Warteschlange erstellt.

    3. Drücken Sie die EINGABETASTE, um die SampleWorkflowApp zu beenden.

    4. Öffnen Sie die Computerverwaltungskonsole, indem Sie "Compmgmt.msc" an einer Eingabeaufforderung ausführen.

    5. Erweitern Sie Dienst und Anwendungen, Nachrichtenwarteschlangen, Private Warteschlangen.

    6. Klicken Sie mit der rechten Maustaste auf die Warteschlange ReceiveTx, und wählen Sie Eigenschaften aus.

    7. Wählen Sie die Registerkarte Sicherheit aus, und gewähren Sie für Jeder die Berechtigungen Nachricht empfangen, Nachricht einsehen und Nachricht senden.

  4. Führen Sie nun das Beispiel aus.

    1. Führen Sie das SampleWorkflowApp-Projekt in Visual Studio erneut ohne Debuggen aus, indem Sie STRG+F5 drücken. Zwei Endpunktadressen werden im Konsolenfenster ausgegeben: eine für den Anwendungsendpunkt und die andere vom WorkflowControlEndpoint. Daraufhin wird eine Workflowinstanz erstellt, und Überwachungsdatensätze für diese Instanz werden im Konsolenfenster angezeigt. Die Workflowinstanz löst eine Ausnahme aus, die bewirkt, dass die Instanz angehalten und abgebrochen wird.

    2. Das Befehlszeilenprogramm kann dann verwendet werden, um weitere Aktionen für diese Instanzen auszuführen. Die Syntax für Befehlszeilenargumente ist wie folgt:

      SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]

      Die unterstützten Befehle sind: Query, Resume und Terminate. Der InstanceId-Schalter ist nur für Resume- und Terminate-Vorgänge erforderlich.

So führen Sie eine (optionale) Bereinigung durch

  1. Öffnen Sie die Computerverwaltungskonsole, indem Sie „Compmgmt.msc“ ausführen.

  2. Erweitern Sie Dienst und Anwendungen, Nachrichtenwarteschlangen, Private Warteschlangen.

  3. Löschen Sie die Warteschlange ReceiveTx.

  4. Um die Persistenzdatenbank zu entfernen, führen Sie "cleanup.cmd" aus.