Delen via


Request-Reply Correlatie

Correlatie tussen aanvragen en antwoorden wordt gebruikt met een Receive/SendReply paar om een tweerichtingsbewerking te implementeren in een werkstroomservice en met een Send/ReceiveReply paar om een tweerichtingsbewerking aan te roepen in een andere webservice. Wanneer u een tweerichtingsbewerking in een WCF-service aanroept, kan de service een traditionele op code gebaseerde WCF-service (Windows Communication Foundation) zijn of een werkstroomservice zijn. Als u een correlatie tussen aanvragen en antwoorden wilt gebruiken, moet een binding in twee richtingen worden gebruikt, zoals BasicHttpBinding. Of u nu een tweerichtingsbewerking aanroept of implementeert, de correlatie-initialisatiestappen zijn vergelijkbaar en worden behandeld in deze sectie.

Correlatie gebruiken in een Two-Way-bewerking met Receive/SendReply

Een Receive/SendReply paar wordt gebruikt om een tweerichtingsbewerking in een werkstroomservice te implementeren. De runtime maakt gebruik van correlatie tussen aanvragen en antwoorden om ervoor te zorgen dat het antwoord wordt verzonden naar de juiste beller. Wanneer een werkstroom wordt gehost met behulp van WorkflowServiceHost, wat het geval is voor werkstroomservices, is de standaardcorrelatie-initialisatie voldoende. In dit scenario wordt een Receive/SendReply paar gebruikt door een werkstroom en is er geen specifieke correlatieconfiguratie vereist.

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.  

Expliciet de correlatie van Request-Reply initialiseren

Als andere tweerichtingsbewerkingen parallel zijn, moet correlatie expliciet worden geconfigureerd. Dit kan worden gedaan door een CorrelationHandle en RequestReplyCorrelationInitializer, of door de Receive/SendReply binnen een CorrelationScope te plaatsen. In dit voorbeeld wordt de correlatie tussen aanvragen en antwoorden geconfigureerd voor een Receive/SendReply paar.

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.  

In plaats van de correlatie expliciet te configureren, kan een CorrelationScope activiteit worden gebruikt. CorrelationScope biedt een impliciete CorrelationHandle aan de berichtenactiviteiten die het bevat. In dit voorbeeld bevindt een Receive/SendReply paar zich in een CorrelationScope. Er is geen expliciete correlatieconfiguratie vereist.

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.  

Als extra correlaties vereist zijn, kunnen ze worden geconfigureerd met behulp van de CorrelationInitializers eigenschap van de respectieve berichtenactiviteiten met behulp van de gewenste CorrelationInitializer typen.

Correlatie gebruiken in een Two-Way-bewerking met Send/ReceiveReply

Hoewel de Receive activiteit alleen kan worden gebruikt in een werkstroomservice die wordt gehost door WorkflowServiceHost, Send en het Send/ReceiveReply paar kan worden gebruikt in elke werkstroom die een methode op een webservice moet aanroepen. Als de werkstroom wordt gehost met behulp van WorkflowServiceHost, geldt de standaardcorrelatie die in de vorige sectie wordt beschreven, maar als dat niet het geval is, moet de correlatie expliciet worden geconfigureerd met behulp van de gewenste CorrelationInitializer en CorrelationHandle, of met behulp van het impliciete ingangsbeheer van de CorrelationScope.

Wanneer u Serviceverwijzing toevoegen gebruikt voor een service met tweerichtingsbewerkingen, worden activiteiten gegenereerd die een Send/ReceiveReply paaractiviteit intern verpakken met de correlatie aanvraag/antwoord die expliciet is opgegeven.