KontextaustauschkorrelationContext Exchange Correlation

Kontextkorrelation basiert auf dem kontextaustauschmechanismus, der gemäß der .NET Context Exchange Protocol Specification.Context correlation is based on the context exchange mechanism described in the .NET Context Exchange Protocol Specification. Bei der Kontextkorrelation wird ein bekannter Kontextheader oder ein Cookie verwendet, um Nachrichten der richtigen Instanz zuzuordnen.Context correlation uses a well-known context header or cookie to relate messages to the correct instance. Zur Durchführung der Kontextkorrelation muss eine kontextbasierte Bindung wie BasicHttpContextBinding, WSHttpContextBinding oder NetTcpContextBinding auf dem Endpunkt verwendet werden, der für WorkflowServiceHost bereitgestellt wird.To use context correlation, a context-based binding such as BasicHttpContextBinding, WSHttpContextBinding, or NetTcpContextBinding must be used on the endpoint provided to the WorkflowServiceHost. In diesem Thema wird erläutert, wie die Kontextkorrelation mit Messagingaktivitäten in einem Workflowdienst verwendet wird.This topic explains how to use context correlation with messaging activities in a workflow service.

Verwenden der KontextkorrelationUsing Context Correlation

Die Kontextkorrelation wird verwendet, wenn ein Client häufig Aufrufe an einen Workflowdienst durchführen muss und der Dienst mit einer der Kontextbindungen gehostet wird.Context correlation is used when a client must make repeated calls into a workflow service and the service is hosted using one of the context bindings. Diese Art der Korrelation wird initialisiert, indem eine Receive / SendReply -Paar im Workflow Service.This type of correlation is initialized by a Receive/SendReply pair in the workflow service. Der Kontext wird zusammen mit der Antwort an den Client zurückgesendet, und der Client fügt diesen Kontext dann an nachfolgende Aufrufe des Diensts an.The context is sent back to the client together with the reply, and then the client attaches this context on subsequent calls to the service.

Konfigurieren der Kontextkorrelation in einem WorkflowdienstConfiguring Context Correlation in a Workflow Service

Die Kontextkorrelation wird mit einem ContextCorrelationInitializer initialisiert, der der SendReply-Aktivität zugeordnet ist. Diese Aktivität antwortet auf die ursprüngliche eingehende Nachricht.Context correlation is initialized by using a ContextCorrelationInitializer that is associated with the SendReply activity that replies to the initial incoming message. Im folgenden Beispiel wird SendReply konfiguriert, um eine Kontextkorrelation zu initialisieren.In the following example, the SendReply is configured to initialize a context correlation.

Variable<string> Item = new Variable<string>();  
Variable<CorrelationHandle> OrderHandle = new Variable<CorrelationHandle>();  

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

SendReply ReplyToStartOrder = new SendReply  
{  
    Request = StartOrder,  
    CorrelationInitializers =  
    {  
        new ContextCorrelationInitializer  
        {  
            CorrelationHandle = OrderHandle  
        }  
    }  
};  

Hinweis

In diesem Beispiel werden zwei Korrelationstypen verwendet: die Kontextkorrelation und die Anforderung-Antwort-Korrelation.In this example, there are actually two types of correlation being used: context correlation and request-reply correlation. Die Kontextkorrelation wird verwendet, damit Aufrufe von Clients an die richtige Instanz weitergeleitet werden.The context correlation is used so that calls from clients are routed to the correct instance. Die Anforderung-Antwort-Korrelation wird von den Receive-Aktivitäten und den SendReply-Aktivitäten gemeinsam verwendet, um den von diesen Aktivitäten modellierten bidirektionalen Vorgang zu implementieren.The request-reply correlation is used by the Receive and the SendReply activities together to implement the two-way operation modeled by these activities. In diesem Beispiel nur die kontextkorrelation explizit konfiguriert ist, und die Receive / SendReply -Paar verwendet die standardmäßige Anforderung / Antwort-Korrelation, die über die implizite bereitgestellt wird CorrelationHandle Verwaltung von WorkflowServiceHost.In this example, only the context correlation is explicitly configured, and the Receive/SendReply pair is using the default request-reply correlation that is provided by the implicit CorrelationHandle management of WorkflowServiceHost. Bei Verwendung der ReceiveAndSendReply -Aktivitätsvorlage im Workflow-Designer, Anforderung / Antwort-Korrelation explizit konfiguriert.When using the ReceiveAndSendReply activity template in the workflow designer, request-reply correlation is explicitly configured. Weitere Informationen zur Anforderung / Antwort-Korrelation und implizite korrelationshandleverwaltung finden Sie unter Anforderung / Antwort- und Übersicht über die Korrelation.For more information about request-reply correlation and implicit correlation handle management, see Request-Reply and Correlation Overview. Weitere Informationen zu den ReceiveAndSendReply Aktivitätsvorlage, finden Sie unter ReceiveAndSendReply.For more information about the ReceiveAndSendReply activity template, see ReceiveAndSendReply.

In den nachfolgenden Receive-Aktivitäten im Workflowdienst können auf das CorrelationHandle-Objekt verweisen, das im vorherigen Beispiel von SendReply initialisiert wurde.Subsequent Receive activities in the workflow service can reference the CorrelationHandle that was initialized by the SendReply in the previous example.

Receive AddItem = new Receive  
{  
    ServiceContractName = "IOrderService",  
    OperationName = "AddItem",  
    CorrelatesWith = OrderHandle  
};  

Der Endpunkt wird dann auf dem WorkflowServiceHost konfiguriert, um eine kontextbasierte Bindung zu verwenden, z. B. BasicHttpContextBinding.The endpoint is then configured on the WorkflowServiceHost to use a context-based binding, such as BasicHttpContextBinding.

<endpoint  
  contract="IOrderContract"  
  binding = "basicHttpContextBinding"  
  address="http://localhost:8080/OrderService" />  

Konfigurieren der Kontextkorrelation in einem WorkflowclientConfiguring Context Correlation in a Workflow Client

Wenn der Client ein anderer Workflow ist, muss die Kontextkorrelation auch auf dem Client konfiguriert werden.When the client is another workflow, context correlation must be configured on the client as well. Im clientworkflow der ReceiveReply von der Send / ReceiveReply -Paar, den erste Aufruf an den Workflowdienst besteht, muss konfiguriert sein, mit einer ContextCorrelationInitializer.On the client workflow, the ReceiveReply of the Send/ReceiveReply pair that makes the initial call to the workflow service must be configured with a ContextCorrelationInitializer.

Variable<CorrelationHandle> cchandle = new Variable<CorrelationHandle>();  
Send request = new Send  
{  
    // Activity configuration omitted.  
};  

ReceiveReply reply = new ReceiveReply  
{  
    Request = request,  
    CorrelationInitializers =   
    {  
        new ContextCorrelationInitializer  
        {  
            CorrelationHandle = cchandle  
        }  
    }  
};  

Nachdem die Korrelation initialisiert wurde, können nachfolgende Send-Aktivitäten das CorrelationHandle-Objekt verwenden, um Methoden auf der gleichen Dienstinstanz aufzurufen.After the correlation is initialized, subsequent Send activities can use the CorrelationHandle to invoke methods on the same service instance.

Send request2 = new Send  
{  
    CorrelatesWith = cchandle,  
    // Remaining activity configuration omitted.  
};  

Beachten Sie, dass die Kontextkorrelation in diesen Beispielen explizit konfiguriert wurde.Note that in these examples, the context correlation has been explicitly configured. Wenn der Clientworkflow nicht auch in einem WorkflowServiceHost-Objekt gehostet wird, muss die Korrelation explizit konfiguriert werden, es sei denn, die Aktivitäten sind in einer CorrelationScope-Aktivität enthalten.If the client workflow is not also hosted in a WorkflowServiceHost, then correlation must be explicitly configured, unless the activities are contained within a CorrelationScope activity. Weitere Informationen zu kontextkorrelation, finden Sie unter der NetContextExchangeCorrelation Beispiel.For more information about context correlation, see the NetContextExchangeCorrelation sample.

Wenn der Client, der die Aufrufe an den Workflowdienst durchführt, kein Workflow ist, kann er trotzdem wiederholte Aufrufe ausführen. Es muss nur gewährleistet sein, dass er den explizit den Kontext übergibt, den der erste Aufruf an den Workflowdienst zurückgibt.If the client that is making calls to the workflow service is not a workflow, then it can still make repeated calls as long as it explicitly passes back the context that is returned from the first call to the workflow service. Proxys, die durch das Hinzufügen eines Dienstverweises in Visual Studio 2012Visual Studio 2012 generiert werden, speichern und übergeben diesen Kontext standardmäßig.Proxies generated by adding a service reference in Visual Studio 2012Visual Studio 2012 store and pass this context by default.