Delen via


Correlatie tussen aanvragen en antwoorden

Correlatie tussen aanvragen en antwoorden wordt gebruikt met een paar voor het implementeren van een Receive/SendReply tweerichtingsbewerking in een werkstroomservice en met een Send/ReceiveReply paar dat een tweerichtingsbewerking aanroept 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 tweerichtingsbewerking 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.  

Correlatie van aanvraag-antwoord expliciet initialiseren

Als andere tweerichtingsbewerkingen parallel zijn, moet correlatie expliciet worden geconfigureerd. Dit kan worden gedaan door een CorrelationHandle enRequestReplyCorrelationInitializer, of door de/ReceiveSendReply binnenkant van een CorrelationScope. 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 tweerichtingsbewerking 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 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.