MessagingaktivitätenMessaging Activities

Messagingaktivitäten ermöglichen Workflows das Senden und Empfangen von WCF-Nachrichten.Messaging activities allow workflows to send and receive WCF messages. Indem Sie einem Workflow Messagingaktivitäten hinzufügen, können Sie beliebige komplexe Nachrichtenaustauschmuster (MEPs) modellieren.By adding messaging activities to a workflow you can model any arbitrarily complex message exchange patterns (MEP).

NachrichtenaustauschmusterMessage Exchange Patterns

Es gibt drei grundlegende Nachrichtenaustauschmuster:There are three basic message exchange patterns:

  • Datagramm – beim Verwenden des Datagramms-Nachrichtenaustauschmusters sendet des Clients eine Nachricht an den Dienst, aber der Dienst antwortet nicht.Datagram - When using the datagram MEP the client sends a message to the service, but the service does not respond. Dies wird auch als "fire and forget" bezeichnet.This is sometimes called "fire and forget". Ein "fire and forget"-Austausch erfordert eine Out-of-Band-Bestätigung für die erfolgreiche Zustellung.A fire and forget exchange is one that requires out-of-band confirmation of successful delivery. Die Nachricht könnte unterwegs verloren gehen und den Dienst nicht erreichen.The message might be lost in transit and never reach the service. Wenn der Client das Senden einer Nachricht erfolgreich abgeschlossen hat, ist dies keine Garantie dafür, dass der Dienst die Nachricht erhalten hat.If the client successfully sends a message, it does not guarantee that the service has received the message. Das Datagramm ist ein wichtiger Baustein für das Messaging, da Sie darauf Ihre eigenen Nachrichtenaustauschmuster aufbauen können.The datagram is a fundamental building block for messaging, as you can build your own MEPs on top of it.

  • Anforderung / Antwort : Wenn eine Nachricht an den Dienst, der Dienst führt die erforderliche Verarbeitung und sendet dann eine Antwort zurück an den Client sendet das Anforderung / Antwort-Nachrichtenaustauschmuster des Clients verwenden.Request-Response - When using the request-response MEP the client sends a message to the service, the service does the required processing, and then sends a response back to the client. Das Muster besteht aus Anforderungs-Antwort-Paaren.The pattern consists of request-response pairs. Beispiele für Anforderung-Antwort-Aufrufe sind Remoteprozeduraufrufe (RPC) und Browser-GET-Anforderungen.Examples of request-response calls are remote procedure calls (RPC) and browser GET requests. Dieses Muster wird auch als Halbduplex bezeichnet.This pattern is also known as half-duplex.

  • Duplex – beim Verwenden der duplex-Nachrichtenaustauschmuster der Client und der Dienst Nachrichten miteinander in beliebiger Reihenfolge senden kann.Duplex - When using the duplex MEP the client and service can send messages to each other in any order. Das Duplex-Nachrichtenaustauschmuster ist mit einem Telefongespräch vergleichbar, bei dem jedes gesprochene Wort einer Nachricht entspricht.The duplex MEP is like a phone conversation, where each word being spoken is a message.

Mithilfe der Messagingaktivitäten können Sie diese grundlegenden Nachrichtenaustauschmuster sowie andere komplexe Nachrichtenaustauschmuster nach Belieben implementieren.The messaging activities allow you to implement any of these basic MEPs as well as any arbitrarily complex MEP.

MessagingaktivitätenMessaging Activities

.NET Framework 4.6.1.NET Framework 4.6.1 definiert die folgenden Messagingaktivitäten:The .NET Framework 4.6.1.NET Framework 4.6.1 defines the following messaging activities:

  • Send – Verwenden Sie die Send-Aktivität zum Senden einer Nachricht.Send- Use the Send activity to send a message.

  • SendReply – Verwenden Sie die SendReply-Aktivität zum Senden einer Antwort auf eine empfangene Nachricht.SendReply - Use the SendReply activity to send a response to a received message. Diese Aktivität wird von Workflowdiensten beim Implementieren eines Anforderung-Antwort-Nachrichtenaustauschmusters verwendet.This activity is used by workflow services when implementing a request/reply MEP.

  • Receive – Verwenden Sie die Receive-Aktivität zum Empfangen einer Nachricht.Receive- Use the Receive activity to receive a message.

  • ReceiveReply – Verwenden Sie die ReceiveReply-Aktivität zum Empfangen einer Antwortnachricht.ReceiveReply - Use the ReceiveReply activity to receive a reply message. Diese Aktivität wird von Workflowdienstclients beim Implementieren eines Anforderung-Antwort-Nachrichtenaustauschmusters verwendet.This activity is used by workflow service clients when implementing a request/reply MEP.

Messagingaktivitäten und NachrichtenaustauschmusterMessaging Activities and Message Exchange Patterns

Ein Datagramm-Nachrichtenaustauschmuster umfasst einen Client, der eine Nachricht sendet, und einen Dienst, der die Nachricht empfängt.A datagram MEP involves a client sending a message and a service receiving the message. Verwenden Sie eine Send-Aktivität zum Senden der Nachricht, wenn der Client ein Workflow ist.If the client is a workflow use a Send activity to send the message. Um diese Nachricht in einem Workflow zu empfangen, verwenden Sie eine Receive-Aktivität.To receive that message in a workflow, use a Receive activity. Die Aktivitäten Send und Receive verfügen jeweils über eine Eigenschaft mit dem Namen Content.The Send and Receive activities each have a property named Content. Diese Eigenschaft enthält die Daten, die gesendet oder empfangen werden.This property contains the data being sent or received. Beim Implementieren des Anforderung-Antwort-Nachrichtenaustauschmusters verwendet sowohl der Client als auch der Dienst Aktivitätspaare.When implementing the request-response MEP both the client and the service use pairs of activities. Der Client verwendet eine Send-Aktivität, um die Nachricht zu senden, und eine ReceiveReply-Aktivität, um die Antwort vom Dienst zu empfangen.The client uses a Send activity to send the message and a ReceiveReply activity to receive the response from the service. Diese zwei Aktivitäten sind einander über die Request-Eigenschaft zugeordnet.These two activities are associated with each other by the Request property. Diese Eigenschaft wird auf die Send-Aktivität festgelegt, die die ursprüngliche Nachricht gesendet hat.This property is set to the Send activity that sent the original message. Der Dienst verwendet ebenfalls ein Paar zugeordneter Aktivitäten: Receive und SendReply.The service also uses a pair of associated activities: Receive and SendReply. Diese beiden Aktivitäten werden von der Request-Eigenschaft zugeordnet.These two activities are associated by the Request property. Diese Eigenschaft wird auf die Receive-Aktivität festgelegt, die die ursprüngliche Nachricht empfangen hat.This property is set to the Receive activity that received the original message. Die Aktivitäten ReceiveReply und SendReply ermöglichen Ihnen wie Send und Receive das Senden einer Message-Instanz oder eines Nachrichtenvertragstyps.The ReceiveReply and SendReply activities, like Send and Receive allow you to send a Message instance or a message contract type.

Aufgrund der langen Ausführungsdauer von Workflows ist es für das Duplexmuster der Kommunikation wichtig, dass es auch Konversationen mit langer Laufzeit unterstützt.Because of the long-running nature of workflows, it is important for the duplex pattern of communication to also support long-running conversations. Um Konversationen mit langer Laufzeit zu unterstützen, müssen Clients, die die Konversation initiieren, dem Dienst die Möglichkeit eines Rückrufs zu einem späteren Zeitpunkt geben, sobald die Daten verfügbar sind.To support long-running conversations, clients who initiate the conversation must provide the service with an opportunity to call it back at a later time when the data becomes available. Eine Auftragsanforderung wird z. B. zur Genehmigung durch den Manager eingereicht. Sie wird ggf. jedoch erst nach einem Tag, einer Woche oder sogar einem Jahr verarbeitet. Der Workflow, der die Genehmigung von Bestellungen verwaltet, muss den Vorgang wiederaufnehmen können, nachdem die Genehmigung erteilt wurde.For example, a purchase order request is submitted for manager approval, but it might not be processed for a day, a week, or even a year; the workflow that manages the purchase order approval must know to resume after the approval is given. Dieses Muster der Duplexkommunikation wird in Workflows unterstützt, die die Korrelation verwenden.This pattern of duplex communication is supported in workflows using correlation. Um ein Duplexmuster zu implementieren, verwenden Sie die Aktivitäten Send und Receive.To implement a duplex pattern, use Send and Receive activities. Auf der Receive Aktivität initialisieren eine Korrelation mit den speziellen Schlüsselwert System.ServiceModel.Activities.CorrelationHandle.CallbackHandleName.On the Receive activity, initialize a correlation using the special key value of System.ServiceModel.Activities.CorrelationHandle.CallbackHandleName. Legen Sie dieses Korrelationshandle für die Send-Aktivität als CorrelatesWith-Eigenschaftswert fest.On the Send activity set that correlation handle as the CorrelatesWith property value. Weitere Informationen finden Sie unter permanenter Duplex.For more information, see Durable Duplex.

Hinweis

Die dupleximplementierung des Workflows des mithilfe einer rückrufkorrelation ("permanenter Duplex") Dient zur langer Konversationen.Workflow’s implementation of duplex using a callback correlation ("Durable Duplex") is intended for long-running conversations. Dies ist nicht das Gleiche wie WCF-Duplex mit Rückrufverträgen, wo die Konversation nur über eine kurze Ausführungsdauer verfügt (die Lebensdauer des Kanals).This is not the same as WCF duplex with callback contracts where the conversation is short-running (the lifetime of the channel).

Nachrichtenformatierung und MessagingaktivitätenMessage Formatting and Messaging Activities

Die Aktivitäten Receive und ReceiveReply verfügen über eine Eigenschaft mit dem Namen Content.The Receive and ReceiveReply activities have a property named Content. Diese Eigenschaft hat den Typ ReceiveContent und stellt Daten dar, die die Receive-Aktivität oder die ReceiveReply-Aktivität empfängt.This property is of type ReceiveContent and represents data the Receive or ReceiveReply activity receives. .NET Framework definiert zwei verknüpfte Klassen mit den Namen ReceiveMessageContent und ReceiveParametersContent, die beide von ReceiveContent abgeleitet sind.The .NET Framework defines two related classes called ReceiveMessageContent and ReceiveParametersContent both of which are derived from ReceiveContent. Legen Sie die Receive-Eigenschaft der ReceiveReply- oder der Content-Aktivität auf eine Instanz einer dieser Typen fest, um Daten in einem Workflowdienst zu empfangen.Set the Receive or ReceiveReply activity’s Content property to an instance of one of these types to receive data into a workflow service. Der zu verwendende Typ hängt vom Typ der Daten ab, die die Aktivität empfängt.The type to use depends upon the type of data the activity receives. Wenn die Aktivität ein Message-Objekt oder einen Nachrichtenvertragstyp empfängt, verwenden Sie ReceiveMessageContent.If the activity receives a Message object or a message contract type, use ReceiveMessageContent. Wenn die Aktivität einen Satz von Datenvertrags- oder XML-Typen empfängt, die serialisiert werden können, verwenden Sie ReceiveParametersContent.If the activity receives a set of data contract or XML types that can be serialized, use ReceiveParametersContent. Mit ReceiveParametersContent können Sie mehrere Parameter senden, während Sie mit ReceiveMessageContent nur ein Objekt senden können, nämlich die Nachricht (bzw. den Nachrichtenvertragstyp).ReceiveParametersContent allows you to send multiple parameters, whereas ReceiveMessageContent only allows you to send one object, the message (or message contract type).

Hinweis

ReceiveMessageContent kann auch mit einem einzelnen Datenvertrag oder XML-Typ verwendet werden, der serialisiert werden kann.ReceiveMessageContent can also be used with a single data contract or XML type that can be serialized. Der Unterschied zwischen der Verwendung von ReceiveParametersContent mit einem einzelnen Parameter und dem direkten Übergeben des Objekts an ReceiveMessageContent ist das Übertragungsformat.The difference between using ReceiveParametersContent with a single parameter and the object passed directly to ReceiveMessageContent is the wire-format. Der Inhalt des Parameters wird mit einem XML-Element als Wrapper versehen, das dem Vorgangsnamen entspricht, und das serialisierte Objekt wird mit einem XML-Element als Wrapper versehen, indem der Parametername (z. B. <Echo><msg>Hello, World</msg></Echo>) verwendet wird.The parameter’s content is wrapped in an XML element that corresponds to the operation name and the serialized object is wrapped in an XML element using the parameter name (for example, <Echo><msg>Hello, World</msg></Echo>). Der Meldungsinhalt weist keinen Vorgangsnamen als Wrapper auf.The message content is not wrapped by the operation name. Stattdessen wird das serialisierte Objekt in einem XML-Element platziert, indem der Typname mit XML-Qualifizierung (z. B. <string>Hello, World</string>) verwendet wird.Instead, the serialized object is placed within an XML element using the XML-qualified type name (for example, <string>Hello, World</string>).

Die Aktivitäten Send und SendReply verfügen auch über eine Eigenschaft mit dem Namen Content.The Send and SendReply activities also have a property named Content. Diese Eigenschaft hat den Typ SendContent und stellt Daten dar, die die Send-Aktivität oder die SendReply-Aktivität sendet.This property is of type SendContent and represents data the Send or SendReply activity sends. .NET Framework definiert zwei verknüpfte Typen mit den Namen SendMessageContent und SendParametersContent, die beide von SendContent abgeleitet sind.The .NET Framework defines two related types called SendMessageContent and SendParametersContent both of which are derived from SendContent. Legen Sie die Send-Eigenschaft der SendReply-Aktivität oder Content-Aktivität auf eine Instanz mit einem dieser Typen fest, um Daten von einem Workflowdienst zu senden.Set the Send or SendReply activity’s Content property to an instance of one of these types to send data from a workflow service. Der zu verwendende Typ hängt vom Typ der Daten ab, die die Aktivität sendet.The type to use depends upon the type of data the activity sends. Wenn die Aktivität ein Message-Objekt oder einen Nachrichtenvertragstyp sendet, verwenden Sie SendMessageContent.If the activity sends a Message object or a message contract type, use SendMessageContent. Wenn die Aktivität einen Datenvertragstyp sendet, verwenden Sie SendParametersContent.If the activity sends a data contract type use SendParametersContent. Mit SendParametersContent können Sie mehrere Parameter senden, während Sie mit SendMessageContent nur ein Objekt senden können, nämlich die Nachricht (bzw. den Nachrichtenvertragstyp).SendParametersContent allows you to send multiple parameters, whereas SendMessageContent only allows you to send one object, the message (or the message contract type).

Falls Sie nur mithilfe der Messagingaktivitäten programmieren müssen, verwenden Sie die generischen Objekte InArgument<T> und OutArgument<T> zum Versehen der Objekte mit Wrappern, die Sie den Nachrichten- oder Parametereigenschaften der Aktivitäten Send, SendReply, Receive und ReceiveReply zuweisen.When programming imperatively with the messaging activities, you use the generic InArgument<T> and OutArgument<T> to wrap the objects you assign to the message or parameters properties of the Send, SendReply, Receive, and ReceiveReply activities. Verwendung InArgument<T> für die Send und SendReply Aktivitäten und OutArgument<T> für Receive und ReceiveReply Aktivitäten.Use InArgument<T> for the Send and SendReply activities and OutArgument<T> for Receive and ReceiveReply activities. Für die Sendeaktivitäten werden In-Argumente verwendet, da die Daten an die Aktivitäten übergeben werden.In arguments are used with the send activities because the data is being passed into the activities. Für die Empfangsaktivitäten werden Out-Argumente verwendet, da die Daten aus den Aktivitäten übergeben werden. Dies wird im folgenden Beispiel veranschaulicht.Out arguments are used with the receive activities because data is being passed out of the activities, as shown in the following example.

Receive reserveSeat = new Receive  
{   
    ...   
    Content = new ReceiveParametersContent  
    {  
        Parameters =  
        {  
            { "ReservationInfo", new OutArgument<ReservationRequest>(reservationInfo) }  
        }  
    }  
};  
SendReply reserveSeat = new SendReply  
{   
    ...   
    Request = reserveSeat,  
    Content = new SendParametersContent  
    {  
        Parameters =  
        {  
            { "ReservationId", new InArgument<string>(reservationId) }  
        }  
    },  
};  

Beim Implementieren eines Workflowdiensts, der einen Anforderung/Antwort-Vorgang mit void-Rückgabe definiert, müssen Sie eine SendReply-Aktivität instanziieren und die Content-Eigenschaft auf eine leere Instanz von einem der Inhaltstypen (SendMessageContent oder SendParametersContent) festlegen. Dies wird im folgenden Beispiel veranschaulicht.When implementing a workflow service that defines a request/response operation that returns void, you must instantiate a SendReply activity and set the Content property to an empty instance of one of the content types (SendMessageContent or SendParametersContent) as shown in the following example.

Receive rcv = new Receive()  
{  
ServiceContractName = "IService",  
OperationName = "NullReturningContract",  
Content = new ReceiveParametersContent( new Dictionary<string, OutArgument>() { { "message", new OutArgument<string>() } } )  
};  
SendReply sr = new SendReply()  
{  
Request = rcv  
   Content = new SendParametersContent();  
};  

Dienstverweis hinzufügenAdd Service Reference

Beim Aufrufen eines Workflowdiensts aus einer Workflowanwendung generiert Visual Studio 2012Visual Studio 2012 benutzerdefinierte Messagingaktivitäten. Diese kapseln die üblichen Send-Aktivitäten und ReceiveReply-Aktivitäten, die in einem Anforderung-Antwort-Nachrichtenaustauschmuster verwendet werden.When calling a workflow service from a workflow application, Visual Studio 2012Visual Studio 2012 generates custom messaging activities that encapsulate the usual Send and ReceiveReply activities used in a request/reply MEP. Verwendet diese Funktion mit der rechten Maustaste in des Clientprojekts Visual Studio 2012Visual Studio 2012 , und wählen Sie Hinzufügen eines Dienstverweises.To use this feature right-click the client project in Visual Studio 2012Visual Studio 2012 and select Add Service Reference. Geben Sie im Adressfeld die Basisadresse des Diensts ein, und klicken Sie auf "Gehe zu".Type the base address of the service in the address box and click Go. Die verfügbaren Dienste werden angezeigt, der Services: Feld.The available services are displayed in the Services: box. Erweitern Sie den Dienstknoten, um die unterstützten Verträge anzuzeigen.Expand the service node to display the contracts supported. Wählen Sie den Vertrag, die Sie aufrufen möchten, und die Liste der verfügbaren Vorgänge wird angezeigt, der Vorgänge Feld.Select the contract you want to call and the list of available operations is displayed in the Operations box. Sie können den Namespace für die generierte Aktivität angeben und klicken Sie auf OK.You can then specify the namespace for the generated activity and click OK. In einem Meldungsdialogfeld wird angegeben, dass der Vorgang erfolgreich abgeschlossen wurden und dass sich die generierten benutzerdefinierten Aktivitäten in der Toolbox befinden, nachdem Sie das Projekt neu erstellt haben.You then see a dialog that says the operation completed successfully and that the generated custom activities are in the toolbox after you have rebuilt the project. Für jeden im Dienstvertrag definierten Vorgang ist eine Aktivität vorhanden.There is one activity for each operation defined on the service contract. Nach der Neuerstellung des Projekts können Sie die benutzerdefinierten Aktivitäten per Drag & Drop im Workflow ablegen und im Eigenschaftenfenster alle erforderlichen Eigenschaften festlegen.After rebuilding the project you can drag and drop the custom activities onto your workflow and set any required properties in the properties window.

Messagingaktivitäten und TransaktionenMessaging Activities and Transactions

Wenn einen Aufruf an einen Workflowdienst ausgeführt wird, kann es ratsam sein, eine Transaktion zum Dienstvorgang auszuführen.When a call is made to a workflow service you may want to flow a transaction to the service operation. Platzieren Sie dazu die Receive-Aktivität innerhalb einer TransactedReceiveScope-Aktivität.To do this place the Receive activity within a TransactedReceiveScope activity. Die TransactedReceiveScope-Aktivität enthält eine Receive-Aktivität und einen Textteil.The TransactedReceiveScope activity contains a Receive activity and a body. Die für den Dienst ausgeführte Transaktion wird während der Ausführung des Textteils von TransactedReceiveScope in der Umgebung beibehalten.The transaction flowed to the service remains ambient throughout the execution of the body of the TransactedReceiveScope. Die Transaktion ist abgeschlossen, wenn die Ausführung des Textteils beendet ist.The transaction is completed when the body finishes executing. Weitere Informationen zu Workflows und Transaktionen finden Sie unter Workflowtransaktionen.For more information about workflows and transactions see Workflow Transactions.

Siehe auchSee Also

Zum Senden und Empfangen von Fehlern in WorkflowdienstenHow to Send and Receive Faults in Workflow Services
Erstellen eines Workflowdiensts mit langer AusführungszeitCreating a Long-running Workflow Service