Freigeben über


Verwenden von lokalen Diensten in Workflows

Windows Workflow Foundation unterstützt lokale Kommunikationsdienste in der Hostumgebung eines Workflows und die Kommunikation zwischen Workflows mithilfe von Webdiensten. Weitere Informationen zur Workflowkommunikation mit Webdiensten finden Sie unter Kommunizieren mit anderen Workflows.

Workflowkommunikationsdienste in Windows Workflow Foundation stellen dem Workflow-Writer eine benutzerdefinierte Dienstklasse als Methodenaufrufe und Ereignishandler zur Verfügung, um das Erstellen von Modellen für den Austausch ausgehender und eingehender Nachrichten zu vereinfachen. Das Multiplexing einer einzelnen Dienstklasseninstanz für mehrere Workflowinstanzen ermöglicht dem Hostwriter das Programmieren mit einer einzelnen Position für ausgehende Nachrichten, während beim Auslösen von Ereignissen nach wie vor bestimmte Workflowinstanzen als Ziel gewählt werden.

Das folgende Diagramm zeigt, wie ein lokaler Kommunikationsdienst mit seiner Hostanwendung kommuniziert.

Lokale Hostkommunikation

Die HandleExternalEventActivity-Aktivität und die CallExternalMethodActivity-Aktivität in der Workflowinstanz interagieren mit Ereignissen und Methoden, die in einer benutzerdefinierten Schnittstelle deklariert und in einem benutzerdefinierten lokalen Dienst implementiert werden. Die HandleExternalEventActivity-Aktivität antwortet auf ein bestimmtes Ereignis, das von der Hostanwendung ausgelöst und vom lokalen Dienst implementiert wird. CallExternalMethodActivity ruft eine Methode auf dem lokalen Dienst auf. Weitere Informationen zur Verwendung von HandleExternalEventActivity und CallExternalMethodActivity finden Sie unter Verwenden der HandleExternalEventActivity-Aktivität und Verwenden der CallExternalMethodActivity-Aktivität.

Workflowkommunikationsdienste

Windows Workflow Foundation-Workflowkommunikationsdienste implementieren einen einfachen Mechanismus für Objekte, um mit einer Workflowinstanz zu kommunizieren. Die Definition des Kommunikationskanals ist eine Schnittstelle, und ihre Implementierung ist eine Dienstklasse, die der Laufzeit zur Erleichterung der Kommunikation hinzugefügt wird.

In Bezug auf die Dienstklasse verhält sich der Workflow im Wesentlichen wie jede beliebige andere Klasse. Die Kommunikation mit dem Workflow findet durch Auslösen von Ereignissen und Empfangen von Methodenaufrufen statt. Dem Workflow wird die Kommunikationsschnittstelle als Kanal angezeigt, der eingehende Ereignissenken und ausgehende Vorgangsmethodenaufrufe beinhaltet.

Externe Methodendeklarationen auf der Schnittstelle werden von ExternalDataExchangeService in Methodenaufrufe auf dem Dienstobjekt konvertiert. Mit der Klasse, auf die als lokaler Dienst verwiesen werden kann, werden Ereignisse ausgelöst, die vom Workflow-Laufzeitmodul abgefangen und als eingehende Nachrichten für den Workflow übermittelt werden.

Im folgenden Codebeispiel wird das Definieren einer lokalen Workflowkommunikationsschnittstelle gezeigt.

[ExternalDataExchange]
public interface ICommunicationService
{
    void HelloHost(string message);
    event EventHandler<ExternalDataEventArgs> HelloWorkflow;
}

Dienstklasse

Eine Dienstklasse implementiert eine Schnittstelle, die zum Definieren von Kommunikation mit einem Workflow verwendet wird. Alle Ereignisse auf der Schnittstelle sind unidirektional, das heißt, sie besitzen keinen ref-Parameter bzw. einen out-Parameter und keinen Rückgabewert. Für ausgehende Anforderungen können die Methoden auf der Schnittstelle jedoch über einen ref-Parameter und einen out-Parameter sowie über einen Rückgabewert verfügen.

Das Kommunikationsmodell ist n:1: zahlreiche Workflowinstanzen, von denen jede viele Konversationen mit diesem Singleton-Dienstobjekt führt. Dies bedeutet, dass alle ausgehenden Aufrufe an eine bestimmte Methode (m) von allen Workflows von derselben Methode (m) auf demselben Objekt verarbeitet werden.

Umgekehrt müssen alle eingehenden Aufrufe explizit an die richtige Workflowinstanz und die Konversation weitergeleitet werden. Windows Workflow Foundation stellt m einen Mechanismus zur Verfügung, um die Workflowinstanz und die Konversation des ausgehenden Aufrufs zu unterscheiden. Mit diesen beiden Informationen kann das Objekt eine Antwort zurück an die korrekte Konversation in der korrekten Workflowinstanz leiten.

Windows Workflow Foundation stellt den Instanzbezeichner des aufrufenden Workflows in System.Workflow.Runtime.WorkflowEnvironment.WorkflowInstanceId im ausgehenden aufrufenden Thread bereit.

Im folgenden Codebeispiel wird die Implementierung eines Kommunikationsdiensts veranschaulicht.

public class CommunicationService : ICommunicationService 
{
    public event EventHandler<ExternalDataEventArgs> HelloWorkflow;

    public void HelloHost(string message)
    {
        Console.WriteLine("This is the message: {0}", message);

        // Raise the HelloWorkflow event.
        HelloWorkflow(null, new ExternalDataEventArgs(WorkflowEnvironment.WorkflowInstanceId));
    }
}

Vor dem Start einer Instanz des Workflows muss ExternalDataExchangeService dem Workflow-Laufzeitmodul und anschließend der benutzerdefinierte Kommunikationsdienst ExternalDataExchangeService hinzugefügt werden (siehe folgendes Codebeispiel).

ExternalDataExchangeService externalService = new ExternalDataExchangeService();
workflowRuntime.AddService(externalService);
externalService.AddService(new CommunicationService());

Ein Beispiel für Hostkommunikation mit einem lokalen Dienst finden Sie unter HostCommunication Sample.

Siehe auch

Referenz

HandleExternalEventActivity
CallExternalMethodActivity

Konzepte

Verwenden der HandleExternalEventActivity-Aktivität
Verwenden der CallExternalMethodActivity-Aktivität
Kommunizieren mit anderen Workflows
Workflow- und Anwendungskommunikation

Weitere Ressourcen

HostCommunication Sample

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.