Instanzabfrage und Instanzsteuerung
Dieses Beispiel zeigt die Verwendung der Persistenzspeicherabfrage und der Steuerungsanbieter. Der Abfrageanbieter stellt eine C#-API zur Verfügung, die Benutzern die Abfrage nach in einem Persistenzspeicher gespeicherten Instanzen ermöglicht. Der Steuerungsanbieter stellt eine C#-API zur Verfügung, die Benutzern das Ausgeben von Befehlen (Anhalten, Fortsetzen, Abbrechen, Beenden und Löschen) für eine im Persistenzspeicher gespeicherte Instanz ermöglicht.
Dieses Beispiel enthält einen WF-Testdienst, eine Windows-Konsolenanwendung für die Abfrage nach Instanzen und eine Windows-Konsolenanwendung zum Steuern von Instanzen.
Hinweis
Beispiele werden nur zu Anschauungszwecken bereitgestellt. Sie sind nicht für die Verwendung in einer Produktionsumgebung gedacht und wurden nicht in einer Produktionsumgebung getestet. Microsoft bietet keinen technischen Support für diese Beispiele.
Voraussetzungen
Internetinformationsdienste (Internet Information Services, IIS), Version 7.0
Initialisierter Persistenzspeicher
Visual Studio 2010 und Microsoft AppFabric 1.1 für Windows Server auf dem gleichen Computer
Beispielspeicherort und -dateien
Die Infodatei befindet sich in <samples>\Samples\Hosting\InstanceQueryAndControl.
Alle Dateien, die zum Ausführen dieses Beispiels erforderlich sind, finden Sie unter <samples>\Samples\Hosting\InstanceQueryAndControl:
Der Ordner InstanceControl enthält alle Dateien, die für die Instanzsteuerungs-Beispielanwendung erforderlich sind.
Der Ordner InstanceQuery enthält alle Dateien, die für die Instanzabfrage-Beispielanwendung erforderlich sind.
Der Ordner TestWorkflow enthält alle Dateien, die für den Beispielworkflow erforderlich sind.
Die Projektmappendatei InstanceQueryAndControl.sln definiert das Projekt, das alle Beispielelemente erstellt.
Einrichten und Ausführen dieses Beispiels
Erstellen Sie einen Persistenzspeicher, wenn dies nicht bereits während der Microsoft AppFabric 1.1 für Windows Server-Installation/Konfiguration geschehen ist.
Führen Sie C:\Programme\Windows Server AppFabric\Microsoft.ApplicationServer.Configuration.exe als Administrator aus. Aktivieren Sie im Schritt Arbeitsthread konfigurieren das Kontrollkästchen Persistenzkonfiguration festlegen. Wählen Sie sqlStoreProvider als Persistenzanbieter aus, und klicken Sie dann auf Konfigurieren.
Aktivieren Sie im Fenster Konfiguration des SQL-Persistenzspeichers die Kontrollkästchen Persistenzspeicherregistrierung der Datei 'web.config' des Stammverzeichnisses hinzufügen und Persistenzspeicher initialisieren. Geben Sie den Namen der Persistenzspeicherdatenbank als ApplicationServerWorkflowInstanceStore an. Klicken Sie auf OK, um eine Persistenzspeicherdatenbank mit dem angegebenen Namen zu erstellen. Wenn Sie einen anderen Datenbanknamen verwenden möchten, muss der Beispielcode geändert werden (siehe unten).
Wenn Sie dieses Beispiel auf einem 64-Bit-System ausführen, kopieren Sie die Datei C:\Programme\Windows Server AppFabric\Microsoft.ApplicationServer.StoreManagement.dll in Ihren Projektordner.
Hinweis
Sie benötigen diesen Pfad in Schritt 3.
Erstellen Sie das Projekt.
Öffnen Sie Visual Studio 2010 als Administrator: Klicken Sie auf Start –> Alle Programme –> Microsoft Visual Studio 2010. Klicken Sie mit der rechten Maustaste auf Microsoft Visual Studio 2010, und wählen Sie Als Administrator ausführen aus.
Öffnen Sie das Beispielprojekt: Klicken Sie in Visual Studio auf Datei –> Öffnen –> Projekt/Projektmappe. Wählen Sie die Beispielprojektdatei <Beispiele>\Samples\InstanceQueryAndControl\InstanceQueryAndControl.sln aus. Beim Öffnen der Datei warnt Visual Studio, dass die lokale IIS-URL für den Beispieldienst noch nicht erstellt wurde. Bestätigen Sie die Erstellung des neuen virtuellen Verzeichnisses.
Wenn Sie dieses Beispiel auf einem 64-Bit-System ausführen, führen Sie die folgenden Schritte für das Projekt InstanceQuery und InstanceControl aus: Ändern Sie in Zeile 17 der Datei Program.cs den Pfad der Datei Microsoft.ApplicationServer.StoreManagement.dll in den Speicherort, an den Sie die Datei in Schritt 2 kopiert haben.
In diesem Beispiel wird angenommen, dass der Workflow persistent in der Persistenzdatenbank ApplicationServerWorkflowInstanceStore, die von SQL Express gehostet wird, fortgeführt wird. Sie können den Datenbanknamen und die SQL Server-Instanz in den Zeilen 44 und 45 von Program.cs des Projekts InstanceControl und den Zeilen 37 und 38 von Program.cs des Projekts InstanceQuery ändern.
Drücken Sie F6, um das Projekt zu erstellen. Durch diesen Vorgang wird die Anwendung TestWorkflow automatisch für IIS bereitgestellt.
Konfigurieren Sie die Anwendung TestWorkflow.
Öffnen Sie IIS-Manager: Klicken Sie auf Start –>Systemsteuerung–>Verwaltung –> Internetinformationsdienste-Manager.
Legen Sie den richtigen AppPool fest, und aktivieren Sie das „net.pipe“-Protokoll für die Website.
Wählen Sie im Fenster IIS-Verbindungen den Knoten <Computer>/Sites/Standardwebsite aus.
Klicken Sie im Fenster IIS-Aktionen auf Erweiterte Einstellungen.
Ändern Sie die Einstellung Anwendungspool in ASP.NET v4.0.
Ändern Sie Aktivierte Protokolle in http,net.pipe. Vorsicht: Zwischen dem Komma und „net.pipe“ darf kein Leerzeichen eingefügt werden.
Klicken Sie auf OK.
Legen Sie den richtigen AppPool fest, und aktivieren Sie das „net.pipe“-Protokoll für die Anwendung.
Wählen Sie im Fenster IIS-Verbindungen den Knoten <Computer>/Sites/Standardwebsite/TestWorkflow aus.
Klicken Sie im Fenster IIS-Aktionen auf Erweiterte Einstellungen.
Ändern Sie die Einstellung Anwendungspool in ASP.NET v4.0.
Ändern Sie Aktivierte Protokolle in http,net.pipe. Vorsicht: Zwischen dem Komma und „net.pipe“ darf kein Leerzeichen eingefügt werden.
Klicken Sie auf OK.
Erstellen Sie Instanzen von TestService.
Öffnen Sie den WCF-Testclient.
Wählen Sie im Fenster IIS-Verbindungen den Knoten <Computer>/Sites/Standardwebsite/TestWorkflow aus.
Klicken Sie mit der rechten Maustaste auf TestWorkflow, und wählen Sie Zur Inhaltsansicht wechseln aus.
Klicken Sie mit der rechten Maustaste auf TestService.xamlx, und wählen Sie Durchsuchen aus. Ein Webbrowser wird gestartet und zeigt die Willkommenseite von TestService an.
Öffnen Sie den WCF-Testclient wie folgt: Öffnen Sie den WCF-Testclient. Klicken Sie auf Start –> Alle Programme –> Microsoft Visual Studio 2010 –> Visual Studio Tools –> Visual Studio-Eingabeaufforderung (2010). Geben Sie an der Eingabeaufforderung den Befehl wcftestclient ein.
Kopieren Sie im Fenster URL des Webbrowsers die URL von TestService (z. B. https://localhost/TestWorkflow/TestService.xamlx). Klicken Sie im WCF-Testclient mit der rechten Maustaste auf Meine Dienstprojekte, und klicken Sie auf Dienst hinzufügen. Wenn Sie zur Eingabe der Endpunktadresse aufgefordert werden, fügen Sie die URL von TestService ein.
Rufen Sie den TestService wie folgt auf:
Doppelklicken Sie im Fenster WCF-Testclient auf den Knoten Invoke() unter dem Knoten IService (BasicHttpBinding_IService).
Klicken Sie auf der Registerkarte Invoke auf das Feld (null) in der Spalte Wert. Ändern Sie die Auswahl von (null) in System.Nullable<System.Int32>. Erweitern Sie nun den Knoten int in der Spalte Name. Es wird eine neue Zeile mit dem Wert 0 angezeigt.
Klicken Sie auf Aufrufen. Auf diese Weise wird eine Instanz von TestService erstellt, die 10 Minuten lang ausgeführt wird.
Ändern Sie den Wert in 1, und klicken Sie dann auf Aufrufen. Auf diese Weise wird eine Instanz von TestService erstellt, die sofort abgeschlossen ist.
Ändern Sie den Wert in 2, und klicken Sie dann auf Aufrufen. Auf diese Weise wird eine Instanz von TestService erstellt, die eine Ausnahme auslöst und dann angehalten wird.
Führen Sie eine Abfrage nach Instanzen aus.
Stellen Sie in Visual Studio sicher, dass InstanceQuery das Standardstartprojekt ist, und drücken Sie dann F5, um die Abfrage nach Instanzen zu starten. Ein Konsolenfenster wird geöffnet. Es zeigt die drei Instanzen an, die Sie in Schritt 5b erstellt haben.
Führen Sie alternativ den Befehl InstanceQuery an einer Eingabeaufforderung aus:
- Öffnen Sie eine Eingabeaufforderung. Führen Sie den Befehl <Beispiele>\Samples\Hosting\InstanceQueryAndControl\InstanceQuery\bin\Debug\InstanceQuery.exe [List|Count|Group] aus.
Steuern von Instanzen.
- Führen Sie an einer Eingabeaufforderung den Befehl <Beispiele>\Samples\Hosting\InstanceQueryAndControl\InstanceControl\bin\Debug\InstanceControl.exe <InstanceId> [Suspend|Resume|Cancel|Terminate|Delete] aus. Verwenden Sie die aus 20 Zeichen bestehende Instanz-ID-GUIDs aller zuvor von Ihnen erstellten Instanzen.
Entfernen dieses Beispiels
Löschen Sie alle Dienstinstanzen des TestWorkflow-Diensts aus dem Persistenzspeicher. Öffnen Sie ein Fenster der Administratorkonsole, und geben Sie die folgenden Befehle an:
> powershell > import-module applicationServer > Get-ASAppServiceInstance -SiteName "Default Web Site" -VirtualPath "/TestWorkflow/TestService.xamlx" | Remove-AsAppServiceInstance
Veranschaulichung
Das Beispiel enthält drei Projekte:
TestWorkflow implementiert einen WF-Dienst. Der Dienst wird in IIS gehostet. Bei jedem Aufruf des Diensts wird eine neue Instanz des Diensts erstellt. Wenn der Dienst über den WCF-Testclient aufgerufen wird, übergibt der Benutzer einen Parameter an den Dienst. Abhängig von diesem Parameter wird die Instanz 10 Minuten lang ausgeführt, sofort abgeschlossen, oder die löst eine Ausnahme aus.
InstanceQuery implementiert eine Konsolenanwendung, die eine Abfrage für den Persistenzspeicher ausgibt und die Ergebnisse auf dem Bildschirm anzeigt. Der Benutzer muss den Abfragetyp, die Abfrageparameter und die Verbindungszeichenfolge für den Persistenzspeicher angeben.
InstanceControl implementiert eine Konsolenanwendung, die einen Steuerungsbefehl für eine Instanz ausgibt, die in einem Persistenzspeicher gespeichert ist. Der Benutzer muss den Befehlstyp, die Instanz-ID und die Verbindungszeichenfolge für den Persistenzspeicher angeben.
Instanzabfrage-Beispielanwendung
Die Instanzabfrage-Beispielanwendung demonstriert die Funktionen und die API des AppFabric-Abfrageanbieters. Der Abfrageanbieter ermöglicht dem Benutzer das Aufgeben von drei Abfragetypen:
Abrufen einer Liste von Instanzen, die in einem Persistenzspeicher gespeichert sind und deren Eigenschaften mit der Abfrage übereinstimmen. Diese Abfrage gibt ein Array von instanceInfo-Objekten zurück.
Abrufen der Anzahl von Instanzen, die in einem Persistenzspeicher gespeichert sind und deren Eigenschaften mit der Abfrage übereinstimmen. Diese Abfrage gibt einen Int32-Wert zurück.
Abrufen der Anzahl von Instanzen, die in einem Persistenzspeicher gespeichert sind und deren Eigenschaften mit der Abfrage übereinstimmen, und Gruppieren dieser gemäß definierten Kategorien. Diese Abfrage gibt einen aufzählbaren Wert vom Typ groupingResult zurück.
Für jeden Abfragetyp stellt der Abfrageanbieter eine asynchrone API zur Verfügung, die die Abfrage ausführt. Eingabe und Rückgabetyp sind abhängig vom Abfragetyp unterschiedlich. Für alle Abfragetypen kann der Benutzer eine Sammlung von Abfragefiltern angeben. Das Beispiel legt alle Filter auf null fest. Dies bedeutet, dass die Abfrage alle im Informationsspeicher gespeicherten Instanzen erfasst. Der Benutzer muss neben den Abfragefilterparametern die Verbindungszeichenfolge für den Persistenzspeicher angeben. Das Beispiel geht davon aus, dass die Instanzen in DefaultSqlWorkflowInstanceStore gespeichert sind. Außerdem wird davon ausgegangen, dass die Datenbank integrierte Windows-Sicherheit zum Authentifizieren des Datenbankzugriffs verwendet.
Wenn eine List der Instanzen angefordert wird, muss der Benutzer die maximal zurückzugebende Anzahl von Instanzen sowie die Sortierung der Instanzen angeben. Zurzeit bietet der Abfrageanbieter nur eine Sortierung nach LastUpdatedTime oder die Rückgabe einer unsortierten Liste an.
Wenn die gruppierte Anzahl von Instanzen angefordert wird, muss der Benutzer die Gruppierungsparameter angeben. Diese Parameter werden als List<GroupingMode> zur Verfügung gestellt. Das erste Element definiert die Hauptgruppe, jedes folgende Element eine Untergruppe.
Instanzsteuerungs-Beispielanwendung
Die Instanzsteuerungs-Beispielanwendung demonstriert die Funktionen und die API des AppFabric-Steuerungsanbieters. Der Steuerungsanbieter ermöglicht Benutzern das Ausgeben eines Befehls zum Anhalten, Fortsetzen, Abbrechen, Beenden oder Löschen einer Instanz. Neben dem Befehlstyp und der Instanz-ID muss der Benutzer die Dienstbezeichner „SiteName“, „RelativeApplicationPath“ und „VirtualPath“ angeben. Diese Parameter sind für WMS erforderlich, um den Steuerungsendpunkt der Dienstinstanz berechnen zu können. (Die Dienstbezeichner sind nur für das Anhalten, Fortsetzen, Abbrechen und Beenden erforderlich. Der Löschbefehl wird nicht für den Steuerungsendpunkt ausgegeben. Stattdessen wird er direkt in der Datenbank ausgeführt.)
Der Benutzer muss neben den Abfragefilterparametern die Verbindungszeichenfolge für den Persistenzspeicher angeben. Das Beispiel geht davon aus, dass die Instanzen in DefaultSqlWorkflowInstanceStore gespeichert sind. Außerdem wird davon ausgegangen, dass die Datenbank integrierte Windows-Sicherheit zum Authentifizieren des Datenbankzugriffs verwendet.
Beachten Sie, dass die Instanzsteuerungs-Beispielanwendung alle Befehle zum Anhalten, Fortsetzen, Abbrechen oder Beenden in die Befehlswarteschlange des Persistenzspeichers einreiht. Der Befehl wird zu einem späteren Zeitpunkt ausgeführt. Verwenden Sie die Instanzsteuerungs-Beispielanwendung, um festzustellen, ob und wann der Befehl ausgeführt wurde.
Beachten Sie, dass ein Befehl für eine Instanz nur dann in eine Warteschlange eingereiht werden kann, wenn kein anderer ausstehender Befehl für diese Instanz in der Warteschlange vorhanden ist.
Die folgende Tabelle beschreibt die Auswirkungen von Befehlen, wenn diese für Instanzen in verschiedenen Zuständen ausgegeben werden.
Aktueller Status | Anhalten | Fortsetzen | Abbrechen | Beenden | Löschen |
---|---|---|---|---|---|
Running |
Hält die Instanz an. |
Kein Vorgang. |
Bricht die Instanz ab. |
Beendet die Instanz. |
Entfernt die Instanz aus dem Persistenzspeicher. |
Angehalten |
Kein Vorgang. |
Setzt die Instanz fort. |
Bricht die Instanz ab. |
Beendet die Instanz. |
Entfernt die Instanz aus dem Persistenzspeicher. |
Abgeschlossen |
Nicht zulässig. |
Nicht zulässig. |
Nicht zulässig. |
Nicht zulässig. |
Entfernt die Instanz aus dem Persistenzspeicher. |
Warnung
Das Entfernen aktuell ausgeführter Instanzen aus dem Persistenzspeicher kann zu unvorhersehbarem Verhalten führen. Diese Option wird nicht empfohlen.
2012-03-05