Workflowverwaltungsdienst
Der Workflowverwaltungsdienst (WMS) ist ein Windows-Dienst, der die folgenden Verwaltungsdienste für Workflowdienstinstanzen bereitstellt:
Aktivierung von Workflowdienstinstanzen. Der WMS aktiviert Workflowdienstinstanzen in einem Instanzspeicher, wenn die Instanzen aktivierbar werden. Eine Workflowdienstinstanz in einem Instanzspeicher wird als aktivierbar angesehen, wenn die Instanz ausführbar wird und kein der Instanz zugeordneter Diensthost auf dem lokalen Computer ausgeführt wird. In der folgenden Liste sind Gründe dafür verzeichnet, warum eine Instanz ausführbar werden kann:
Die Instanz ist nicht geladen und wird beim Warten auf den Abschluss einer Verzögerungsaktivität persistent fortgeführt, wenn die Verzögerungsaktivität abgeschlossen wird.
Der Diensthost wird heruntergefahren, während die Instanz geladen ist.
Die Instanz ist mit einer abgelaufenen Instanzsperre gesperrt.
Ausführung von Befehlen der Benutzersteuerung. Ein Instanzsteuerungsanbieter für einen Instanzspeicher fügt Befehle, die er von Windows PowerShell-Cmdlets für die Instanzsteuerung empfängt, einer Warteschlange des Instanzspeichers hinzu. Diese Warteschlange wird vom Instanzsteuerungsanbieter erstellt und gewartet. Der WMS ruft die Befehle aus der Warteschlange ab, führt sie aus und löscht anschließend Befehle aus der Warteschlange, wenn die Befehlsausführung erfolgreich war.
Im weiteren Verlauf des Themas werden diese Dienste im Detail erläutert. Weitere Informationen zur Installation und Konfiguration des WMS finden Sie unter Installieren und Konfigurieren des Workflowverwaltungsdiensts.
Aktivierung von Workflowdienstinstanzen
Standardmäßig erkennt WMS Instanzspeicher, die auf aktivierbare Workflowinstanzen überprüft werden müssen, automatisch. Zu diesem Zweck werden die Web.config-Dateien auf Stamm-, Site- und Webanwendungsebene während des Dienststarts und bei Änderungen an einer dieser Konfigurationsdateien durchsucht. Darüber hinaus können bestimmte Instanzspeicher für die Überwachung durch WMS angegeben werden, statt die Instanzspeicher automatisch erkennen zu lassen.
WMS erstellt ein Objekt InstanceStore und abonniert das Ereignis HasActivatableWorkflowEvent für jeden erkannten Instanzspeicher. Ein Instanzspeicher löst HasActivatableWorkflowEvent aus, wenn er eine aktivierbare Workflowinstanz im Speicher findet. Danach beendet der Instanzspeicher die Überwachung, bis der Befehl QueryActivatableWorkflowsCommand einmalig für den Speicher aufgerufen wird.
Wenn WMS das Ereignis HasActivatableWorkflowEvent empfängt, führt er QueryActivatableWorkflowsCommand auf dem Instanzspeicher aus, um Aktivierungsparameter abzurufen, die er zum Erstellen eines Workflowhosts verwendet.
Anschließend ruft WMS den von der Anwendung, die den Dienst mit der zu aktivierenden Instanz enthält, unterstützten Dienstverwaltungsdienst auf und übergibt ihm Aktivierungsparameter. AppFabric fügt den Dienstverwaltungsdienst, einen WCF-Dienst, automatisch allen Anwendungen hinzu, deren Attribut serviceManagement aktiviert ist. Der Dienstverwaltungsdienst macht einen Dienstaktivierungsendpunkt verfügbar, auf den WMS anhand der Adresse zugreift, die aus dem Sitenamen, dem Pfad der virtuellen Anwendung und der bekannten Adresse des Dienstaktivierungsendpunkts gebildet wird. WMS verwendet für diesen Endpunkt die „net.pipe“-Bindung. Weitere Informationen zu diesem Dienst finden Sie unter Dienstverwaltungsdienst.
Der Dienstverwaltungsdienst aktiviert mithilfe der von WMS empfangenen Aktivierungsparameter einen Workflowdiensthost. Der Diensthost erstellt einen Instanzspeicher (wie etwa den SQL-Workflowinstanzspeicher) und ruft eine Methode des Speichers zum Laden der Workflowdienstinstanz aus dem Instanzspeicher in den Arbeitsspeicher auf .
Warnung
Der WMS nimmt sofort alle Änderungen an Verhalten des SQL-Workflowinstanzsspeichers (SWIS, SQL Workflow Instance Store) und entsprechenden Instanzspeicherdefinitionen in Konfigurationsdateien auf und beginnt, diese Speicher zu überwachen. Eine Anwendung verwendet jedoch weiterhin den Instanzspeicher, der im SWIS-Verhalten in der alten Version der Konfigurationsdatei angegeben wurde, bis die Anwendungsdomäne recycelt wird. Die Anwendungsdomäne wird nach dem im Attribut delayNotificationTimeout des Elements httpRuntime festgelegten Zeitraum recycled. Wenn z. B. delayNotificationTimeout auf „5000“ (<httpRuntime delayNotificationTimeout = "5000" />) festgelegt ist, wird die Anwendungsdomäne erst nach weiteren 5000 Sekunden recycled.
Warnung
Wenn Sie Anwendungen oder Anwendungspools deaktivieren, die insgesamt 1000 oder mehr Dienste enthalten, aktiviert der WMS möglicherweise keine der aktivierbaren Dienstinstanzen mehr. Die Problemumgehung besteht darin, Instanzen von Diensten zu verwerfen, die zu diesen Anwendungen/Anwendungspools gehören, bevor Anwendungen bzw. Anwendungspools deaktiviert werden.
Ausführung von Befehlen der Benutzersteuerung
Wenn ein Befehl für eine Workflowdienstinstanz mithilfe eines Windows PowerShell-Cmdlets ausgegeben wird, wird der Befehl einer Befehlswarteschlange in dem vom Dienst verwendeten Instanzspeicher durch einen Instanzsteuerungsanbieter hinzugefügt. Die Befehlswarteschlange wird vom Instanzsteuerungsanbieter gewartet.
Der WMS erkennt Instanzspeicher, die auf Befehle überwacht werden müssen, automatisch. Zu diesem Zweck werden die Web.config-Dateien auf Stamm-, Site- und Webanwendungsebene während des Dienststarts und bei Änderungen an einer dieser Konfigurationsdateien durchsucht. Der WMS erstellt einen Instanzsteuerungsanbieter für jeden erkannten Instanzspeicher und fragt den Anbieter in regelmäßigen Abständen auf Befehle ab. Insbesondere ruft der WMS die Methode BeginTryReceive eines Instanzsteuerungsanbieters zum Empfangen von Befehlen auf.
Der Instanzsteuerungsanbieter ruft seinerseits einen Befehl ab, löscht ihn jedoch nicht aus der Befehlswarteschlange im Instanzspeicher und gibt den Befehl an den WMS zurück. Der Anbieter verhängt für den Befehl in der Befehlswarteschlange eine Sperre mit kurzer Ablaufzeit.
Anschließend ruft der WMS eine geeignete Methode des vom Workflowdiensthost verfügbar gemachten Instanzsteuerungsendpunkts (Instance Control Endpoint, ICE) auf, um den Befehl auf der Ziel-Workflowdienstinstanz auszuführen. Der WMS erfordert eine vom Instanzsteuerungsendpunkt aktivierte „net.pipe“-Bindung und aktivierte Transportsicherheit. Der WMS erstellt durch Kombinieren von Sitenamen, virtuellem Dienstpfad und bekanntem ICE-Pfad eine Endpunktadresse. Der Instanzsteuerungsanbieter stellt als Informationen den Sitenamen und den virtuellen Dienstpfad zur Verfügung. Die ICE-Bindung ist fest als „net.pipe“-Bindung kodiert.
Bei erfolgreicher Befehlsausführung ruft der WMS die Methode Complete des Instanzsteuerungsanbieters auf, und der Anbieter entfernt den Befehl aus der Befehlswarteschlange. Bei einem Fehler der Befehlsausführung ruft WMS die Methode Abandon des Instanzsteuerungsanbieters hinsichtlich des Fehlers auf, und es ist Sache des Anbieters, zu entscheiden, ob der Befehl aus der Befehlswarteschlange entfernt werden oder zwecks späterer Wiederholungsversuche in der Befehlswarteschlange verbleiben soll. Der Instanzsteuerungsanbieter für den SQL-Workflowinstanzspeicher versucht die Ausführung eines Befehls fünf Mal, bevor der Befehl aus der Befehlswarteschlange entfernt wird. Wenn der WMS während der Ausführung eines Befehls abstürzt, läuft die Sperre möglicherweise ab, und der Befehl kann zu einem späteren Zeitpunkt von der gleichen oder einer anderen WMS-Instanz aufgenommen werden.
Wenn der Microsoft Distributed Transaction Coordinator (MSDTC) aktiviert ist und eingehende und ausgehende Kommunikation aktiviert hat, werden Befehle der Instanzsteuerung transaktional ausgeführt. Wenn Sie z. B. eine Workflowdienstinstanz verworfen haben, wird der Status unmittelbar nach der Verarbeitung des Befehls im IIS-Manager angezeigt oder vom Cmdlet als Angehalten angezeigt. Wenn der MSDTC jedoch deaktiviert oder nicht ordnungsgemäß konfiguriert ist, werden Befehle der Instanzsteuerung nicht transaktional ausgeführt. In diesem Fall wird der Status der Instanz nicht auf Angehalten aktualisiert, bis die Instanz entladen und im Instanzspeicher persistent weitergeführt wird, da die Instanz länger als den angegebenen Zeitraum im Leerlauf ausgeführt wurde (Einstellung „Instanzen im Leerlauf entladen“). Beachten Sie, dass beim Ändern von MSDTC-Einstellungen der WMS-Dienst erneut gestartet werden muss, damit der Dienst die aktualisierten MSDTC-Einstellungen aufnimmt.
Tipp
Wenn Sie bemerken, dass Befehle der Instanzsteuerung länger als erwartet im Status Ausstehend verbleiben, sollten Sie überprüfen, ob der WMS auf jedem Server in der Serverfarm ausgeführt wird. Wenn die Instanz aktuell auf einem bestimmten Server ausgeführt wird (nach Auskunft der Überwachungsinformationen) und ein für diese Instanz ausgegebener Steuerungsbefehl nicht ausgeführt wird, müssen Sie überprüfen, ob der WMS auf dem betreffenden Server ausgeführt wird.
Warnung
Der Workflowverwaltungsdienst (WMS, Workflow Management Service) verwendet durchgeführte Befehle, wenn die DTC-Einstellungen "Eingehende zulassen" und "Ausgehende zulassen" aktiviert sind. Wenn Sie DTC deaktivieren, stellen Sie sicher, dass Sie ebenfalls diese Einstellungen explizit deaktivieren, sodass nicht durchgeführte Befehle verwendet werden.
Unterstützung für Serverfarmumgebungen
Normalerweise wird auf jedem Knoten in einer Serverfarm eine WMS-Instanz ausgeführt. Eine WMS-Instanz kann mehrere Instanzspeicher überwachen. Ein Knoten kann mehrere WMS-Instanzen unter verschiedenen Windows-Identitäten ausführen. Es wird empfohlen, nur eine WMS-Instanz für einen Instanzspeicher auf einem Knoten auszuführen. Wenn mehrere WMS-Instanzen auf dem gleichen Knoten ausgeführt werden, die den gleichen Instanzspeicher überwachen, kann es zu Problemen bei der Skalierbarkeit kommen.
Eine Instanz, die früher auf einem Knoten ausgeführt wurde, kann dann möglicherweise von dem WMS auf einem anderen Knoten aufgenommen und auf diesem Knoten aktiviert werden. Dies könnte den Ausgleich der Arbeitsauslastung für WMS innerhalb der Serverfarm unterstützen.
Beim Ausgeben eines Steuerungsbefehls für eine Workflowinstanz wird die betreffende Workflowinstanz möglicherweise irgendwo in der Farm ausgeführt oder auch nicht. WMS übermittelt den Befehl an den Computer, auf dem der Workflow ausgeführt wird, oder weist den lokalen Computer an, den Workflow zu laden und den Befehl auszuführen. Auf diese Weise können Befehle an Instanzen ausgegeben werden, ohne dass bekannt sein muss, auf welchem Computer die betreffende Instanz ausgeführt wird.
Abhängige Features
Die folgenden Punkte betreffen den Workflowverwaltungsdienst (WMS):
Der WMS aktiviert Befehle und führt sie nur auf Instanzen von Workflowdiensten aus, die mithilfe des WorkflowServiceHosts in der IIS/WAS-Umgebung gehostet sind. WMS unterstützt keine Workflowdienste, die unter Verwendung eines anderen Hosts oder in einer anderen Hostingumgebung gehostet sind.
WMS aktiviert Instanzen von Workflowdiensten, die für dauerhafte Statuspersistenz einen Instanzspeicher verwenden.
WMS aktiviert Instanzen von Workflowdiensten, die zu einer Anwendung gehören, die den Dienstverwaltungsdienst bereitstellt. WMS verwendet den Dienstverwaltungsdienst zum Aktivieren eines Diensthosts, der seinerseits eine Instanz aus dem Instanzspeicher lädt.
WMS erfordert, dass der Website die „net.pipe“-Bindung hinzugefügt und das „net.pipe“-Protokoll in der Webanwendung, die den Dienst enthält, aktiviert wird. WMS verzeichnet einen Fehler im Ereignisprotokoll, wenn das „net.pipe“-Protokoll in der Webanwendung nicht aktiviert ist.
Für WMS muss eine Workflowdienstinstanz einen Instanzsteuerungsendpunkt (ICE) verfügbar machen. WMS verwendet diesen Endpunkt zum Ausgeben von Befehlen wie „Anhalten“ und „Fortsetzen“ an Workflowdienstinstanzen.
WMS funktioniert mit jedem Instanzspeicher, der mit einem Instanzspeicheranbieter und einem Instanzsteuerungsanbieter geliefert wird.
WMS erfordert, dass ein Instanzspeicher das Ereignis HasActivatableWorkflowsEvent auslöst, wenn eine Instanz aktivierbar wird.
Hinweis
Sicherheitsbezogene Informationen zu WMS finden Sie unter Sicherheitskonfiguration für Persistenzspeicher.
Sicherheit
Der Workflowverwaltungsdienst (WMS) muss eine Verbindung mit dem von einem Workflowdiensthost verfügbar gemachten Instanzsteuerungsendpunkt (ICE) herstellen, um Workflowdienstinstanzen zu steuern, und eine Verbindung mit dem von einer Webanwendung verfügbar gemachten Dienstverwaltungsendpunkt herstellen, um einen Workflowdiensthost zu starten und anschließend Workflowdienstinstanzen zu laden. Die Gruppe AS_Administrators besitzt Zugriff auf beide Endpunkte. Die Sicherheits-ID (SID) des AppFabric-Workflowverwaltungsdiensts ist ein Mitglied dieser Gruppe. Daher muss das Konto, unter dem der WMS ausgeführt wird, der Gruppe AS_Administrators nicht explizit hinzugefügt werden.
Die folgende Liste enthält Anweisungen für das Sichern von Instanzspeichern und Konfigurationsdateien, die von WMS verwendet werden:
WMS liest Konfigurationsinformationen, einschließlich Verbindungszeichenfolgen aus Konfigurationsdateien, in den Arbeitsspeicher. WMS verarbeitet an diesem Punkt keine verschlüsselten Verbindungszeichenfolgen, daher muss die Verbindungszeichenfolge im Klartextformat vorliegen. Ein böswilliger Benutzer kann Zugriff auf sensible Informationen (wie den Benutzernamen und das Kennwort in einer Verbindungszeichenfolge) aus dem Arbeitsspeicher erhalten. Daher sollten keine sensiblen Informationen in einer in einer Konfigurationsdatei definierten Verbindungszeichenfolge angegeben werden.
Es wird empfohlen, die integrierte Windows-Authentifizierung für die in Web.config-Dateien gespeicherten Verbindungszeichenfolgen zu verwenden. Wenn die integrierte Windows-Authentifizierung nicht verwendet werden kann und Benutzername und Kennwort in einer Verbindungszeichenfolge angegeben werden, die in einer Web.config-Datei definiert ist, müssen die entsprechenden ACLs (Zugriffssteuerungslisten) für die Konfigurationsdateien festgelegt werden. Achten Sie darauf, der Gruppe AS_Administrators Zugriff auf die Web.config-Dateien zu erteilen, auf die WMS zugreifen muss. Ihnen muss bewusst sein, dass das Festlegen von ACLs einen böswilligen Benutzer nicht am Zugriff auf Verbindungszeichenfolgeninformationen aus dem Arbeitsspeicher hindern kann.
Die verschlüsselte SQL-Kommunikation wird durch Hinzufügen von „;Encrypt=yes“ zur SQL-Verbindungszeichenfolge aktiviert. Wenn Sie die Klasse SqlConnectionStringBuilder zum Erstellen einer Verbindungszeichenfolge verwenden, legen Sie die Eigenschaft Encrypt auf true fest. Details zum Aktivieren der verschlüsselten Kommunikation mit dem Server finden Sie unter https://go.microsoft.com/fwlink/?LinkID=187283. Ein böswilliger Benutzer kann die SQL Server-Datenbank manipulieren oder Befehle auf ihr ausführen, wenn die Kommunikation zwischen der Anwendung und dem SQL Server nicht gesichert ist.
In Befehlswarteschlangen bleiben keinerlei Anmeldeinformationen erhalten. Ein Benutzer, der ein Mitglied der Gruppe AS_Administrators ist, die der SQL-Rolle WorkflowAdministrators zugeordnet ist, hat das Recht, alle Instanzen im Instanzspeicher zu steuern, nicht nur bestimmte Typen von Instanzen. Daher sollten Instanzen, für die keine Steuerung durch verschiedene Benutzer vorgesehen ist, in verschiedenen Instanzspeichern gespeichert werden, und die SQL-Rolle WorkflowAdministrators für diese Instanzen sollte verschiedenen Windows-Gruppen zugeordnet sein.
Jedesmal, wenn eine Änderung an einer Web.config-Datei vorgenommen wird, liest der WMS die Datei und überprüft, ob der Datei Speicherdefinitionen hinzugefügt oder aus ihr entfernt wurden. Der Zugriff auf Web.config-Dateien sollte eingeschränkt werden, um das Auslösen der WMS-Dateiverarbeitung durch unberechtigte Benutzer zu verhindern.
Abhängig von der Nachverfolgungsstufe erfasst das AppFabric-Überwachungsfeature Daten mit hoher Datenrate. Es wird empfohlen, die Überwachungs- und Persistenzspeicher nicht in der gleichen Datenbank zu erfassen. Auf diese Weise wirkt sich ein Überlauf des Überwachungsspeichers nicht auf das Persistenzsubsystem aus.
In der folgenden Tabelle sind die SQL-Rollen beschrieben, mit denen der Zugriff auf die Befehlswarteschlange und die Persistenzdatenbank gesichert ist. Der Inhalt in dieser Tabelle bezieht sich nur auf den SQL-Workflowinstanzspeicher.
SQL-Rolle | Beschreibung | Windows-Gruppe |
---|---|---|
WorkflowAdministrators |
Ein Mitglied dieser Rolle kann der Befehlswarteschlange, die Teil der Persistenzdatenbank ist, Befehle hinzufügen (in sie einstellen). Ein Benutzer, der Instanzen steuern möchte (z. B. mithilfe von Windows PowerShell-Cmdlets) muss ein Mitglied dieser Rolle sein. |
AS_Administrators |
WorkflowManagementServiceUsers |
Ein Mitglied dieser Rolle kann Befehle aus der Befehlswarteschlange abrufen. Das Konto, unter dem der WMS ausgeführt wird, muss ein Mitglied dieser Rolle sein, sodass der WMS die in der Befehlswarteschlange gespeicherten Befehle abrufen kann. |
AS_Administrators |
WorkflowActivationUsers |
Ein Mitglied dieser Rolle kann Workflowdienstinstanzen aktivieren, die persistent in der Persistenzdatenbank fortgeführt werden und bereit für die Ausführung sind. |
AS_Administrators |
InstanceStoreObservers |
Ein Mitglied dieser Rolle kann den Instanzspeicher auf Instanzen abfragen und Befehle aus der Befehlswarteschlange im Speicher abrufen. |
AS_Administrators und AS_Observers |
InstanceStoreUsers |
Ein Mitglied dieser Rolle kann Instanzen laden und speichern. Die Aktionen zum Laden und Speichern werden von einem Diensthost ausgeführt, der einen Workflow ausführt. Wenn die Instanzen eines Diensts Dienst1 im Instanzspeicher Speicher1 persistent fortgeführt werden, muss der Anwendungspool AnwPool1, in dem der Diensthost ausgeführt wird, unter einer Identität ausgeführt werden, die Benutzerrechte für Speicher1 besitzt. |
IIS_USRS |
Einen szenariobasierten Sicherheitsleitfaden zur Persistenz finden Sie unter Sicherheitskonfiguration für Persistenzspeicher.
Siehe auch
Konzepte
Sicherheitskonfiguration für Persistenzspeicher
Installieren und Konfigurieren des Workflowverwaltungsdiensts
2011-12-05