Anforderung-Antwort-KorrelationRequest-Reply Correlation

Anforderung-Antwort-Korrelation wird verwendet, mit einem Receive / SendReply -Paar, das einen bidirektionalen Vorgang in einem Workflowdienst und mit implementieren eine Send / ReceiveReply -Paar, das einen bidirektionalen in eine andere Web Vorgang -Dienst.Request-reply correlation is used with a Receive/SendReply pair to implement a two-way operation in a workflow service and with a Send/ReceiveReply pair that invokes a two-way operation in another Web service. Beim Aufrufen der eines bidirektionalen Vorgangs in einem WCF-Dienst der Dienst kann entweder eine herkömmliche imperative codebasierte Windows Communication Foundation (WCF)-Dienst, oder es kann ein Workflowdienst sein.When invoking a two-way operation in a WCF service, the service can be either a traditional imperative code-based Windows Communication Foundation (WCF) service or it can be a workflow service. Zum Verwenden der Anforderung-Antwort-Korrelation muss eine bidirektionale Bindung wie BasicHttpBinding verwendet werden.To use request-reply correlation a two-way binding must be used, such as BasicHttpBinding. Die Schritte zum Initialisieren der Korrelation sind für das Aufrufen und Implementieren eines bidirektionalen Vorgangs gleich und werden in diesem Abschnitt behandelt.Whether invoking or implementing a two-way operation, the correlation initialization steps are similar and are covered in this section.

Verwenden der Korrelation in einem bidirektionalen Vorgang mit Receive/SendReplyUsing Correlation in a Two-Way Operation with Receive/SendReply

Ein Receive / SendReply Paar wird verwendet, um einen bidirektionalen Vorgang in einem Workflowdienst zu implementieren.A Receive/SendReply pair is used to implement a two-way operation in a workflow service. Die Laufzeit verwendet die Anforderung-Antwort-Korrelation, um sicherzustellen, dass die Antwort an den richtigen Aufrufer weitergeleitet wird.The runtime uses request-reply correlation to ensure that the reply is dispatched to the correct caller. Wenn ein Workflow dann mit WorkflowServiceHost gehostet wird, beispielsweise Workflowdienste, ist die standardmäßige Korrelationsinitialisierung ausreichend.When a workflow is hosted using WorkflowServiceHost, which is the case for workflow services, then the default correlation initialization is sufficient. In diesem Szenario eine Receive / SendReply -Paar von einem Workflow verwendet wird, und es ist keine spezielle korrelationskonfiguration erforderlich.In this scenario, a Receive/SendReply pair is used by a workflow, and no specific correlation configuration is required.

Receive StartOrder = new Receive  
{  
    CanCreateInstance = true,  
    ServiceContractName = OrderContractName,  
    OperationName = "StartOrder"  
};  

SendReply ReplyToStartOrder = new SendReply  
{  
    Request = StartOrder,  
    Content = … // Contains the return value, if any.  
};  

// Construct a workflow using StartOrder and ReplyToStartOrder.  

Explizites Initialisieren der Anforderung-Antwort-KorrelationExplicitly Initializing Request-Reply Correlation

Wenn andere bidirektionale Vorgänge parallel laufen, sollte die Korrelation explizit konfiguriert werden.If other two-way operations are in parallel, then correlation should be explicitly configured. Dies kann geschehen, indem Sie angeben einer CorrelationHandle und RequestReplyCorrelationInitializer, oder durch Platzieren der Receive / SendReply innerhalb von einer CorrelationScope.This can be done by specifying a CorrelationHandle and RequestReplyCorrelationInitializer, or by placing the Receive/SendReply inside of a CorrelationScope. In diesem Beispiel wird auf Anforderung-Antwort-Korrelation konfiguriert eine Receive / SendReply Paar.In this example, request-reply correlation is configured on a Receive/SendReply pair.

Variable<CorrelationHandle> RRHandle = new Variable<CorrelationHandle>();  

Receive StartOrder = new Receive  
{  
    CanCreateInstance = true,  
    ServiceContractName = OrderContractName,  
    OperationName = "StartOrder",  
    CorrelationInitializers =  
    {  
        new RequestReplyCorrelationInitializer  
        {  
            CorrelationHandle = RRHandle  
        }  
    }  
};  

SendReply ReplyToStartOrder = new SendReply  
{  
    Request = StartOrder,  
    Content = … // Contains the return value, if any.  
};  

// Construct a workflow using StartOrder and ReplyToStartOrder.  

Anstatt die Korrelation explizit zu konfigurieren, können Sie auch eine CorrelationScope-Aktivität verwenden.Instead of explicitly configuring the correlation, a CorrelationScope activity can be used. CorrelationScope stellt ein implizites CorrelationHandle-Objekt für die darin enthaltenen Messagingaktivitäten bereit.CorrelationScope provides an implicit CorrelationHandle to the messaging activities that it contains. In diesem Beispiel wird eine Receive / SendReply Paar befindet sich innerhalb einer CorrelationScope.In this example, a Receive/SendReply pair is contained inside a CorrelationScope. Es ist keine explizite Korrelationskonfiguration erforderlich.No explicit correlation configuration is required.

Receive StartOrder = new Receive  
{  
    CanCreateInstance = true,  
    ServiceContractName = OrderContractName,  
    OperationName = "StartOrder"  
};  

SendReply ReplyToStartOrder = new SendReply  
{  
    Request = StartOrder,  
    Content = … // Contains the return value, if any.  
};  

CorrelationScope s = new CorrelationScope  
{  
    Body = new Sequence  
    {  
        Activities =   
        {  
            StartOrder,  
            // Activities that create the reply.  
            ReplyToStartOrder  
        }  
    }  
};  

// Construct a workflow using the CorrelationScope.  

Falls zusätzliche Korrelationen erforderlich sind, können diese mit der CorrelationInitializers-Eigenschaft der jeweiligen Messagingaktivitäten konfiguriert werden, indem die gewünschten CorrelationInitializer-Typen verwendet werden.If additional correlations are required then they can be configured using the CorrelationInitializers property of the respective messaging activities using the desired CorrelationInitializer types.

Verwenden der Korrelation in einem bidirektionalen Vorgang mit Send/ReceiveReplyUsing Correlation in a Two-Way Operation with Send/ReceiveReply

Während der Receive Aktivität kann nur verwendet werden, in einem von gehosteten Workflowdienst WorkflowServiceHost, Send und Send / ReceiveReply Paar in einem Workflow, der eine Methode für einen Webdienst aufrufen muss verwendet werden kann.While the Receive activity can only be used in a workflow service hosted by WorkflowServiceHost, Send and the Send/ReceiveReply pair can be used in any workflow that must invoke a method on a Web service. Wenn der Workflow mit WorkflowServiceHost gehostet wird, gilt die im vorherigen Abschnitt beschriebene Standardkorrelation. Falls nicht, muss die Korrelation entweder explizit mit den gewünschten Objekten CorrelationInitializer und CorrelationHandle oder per impliziter Handleverwaltung von CorrelationScope konfiguriert werden.If the workflow is hosted using WorkflowServiceHost then the default correlation described in the previous section applies, but if not, then correlation must be configured either explicitly using the desired CorrelationInitializer and CorrelationHandle, or by using the implicit handle management of the CorrelationScope.

Bei Verwendung Hinzufügen eines Dienstverweises für einen Dienst mit bidirektionalen Vorgängen, werden Aktivitäten generiert, Wrap eine Send / ReceiveReply -paaraktivität intern mit der Anforderung/Antwort-Korrelation explizit angegeben.When using Add Service Reference on a service with two-way operations, activities are generated that wrap a Send/ReceiveReply pair activity internally with the Request/Reply correlation explicitly specified.