Sdílet prostřednictvím


Korelace požadavku a odpovědi

Korelace odpovědí na žádost se používá s párem Receive/SendReply k implementaci obousměrné operace ve službě pracovního postupu a s Send/ReceiveReply dvojicí, která vyvolá obousměrnou operaci v jiné webové službě. Při vyvolání obousměrné operace ve službě WCF může být služba buď tradiční imperativní služba Windows Communication Foundation (WCF), nebo může být službou pracovního postupu. Pokud chcete použít korelaci odpovědi na požadavek, musí se použít obousměrná vazba, například BasicHttpBinding. Bez ohledu na to, jestli se vyvolá nebo implementuje obousměrná operace, jsou kroky inicializace korelace podobné a jsou popsané v této části.

Použití korelace v obousměrné operaci s metodou Receive/SendReply

Pár Receive/SendReply se používá k implementaci obousměrné operace ve službě pracovního postupu. Modul runtime používá korelaci žádosti a odpovědi, aby se zajistilo, že je odpověď odeslána správnému volajícímu. Pokud je pracovní postup hostovaný pomocí WorkflowServiceHost, což je případ pro služby pracovního postupu, pak je dostatečná výchozí inicializace korelace. V tomto scénáři Receive/SendReply se pár používá v pracovním postupu a nevyžaduje se žádná konkrétní konfigurace korelace.

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.  

Explicitní inicializace korelace žádosti a odpovědi

Pokud jsou další obousměrné operace paralelně, měla by být korelace explicitně nakonfigurovaná. To lze provést zadáním a CorrelationHandle , nebo umístěnímSendReplyReceive/uvnitř CorrelationScope.RequestReplyCorrelationInitializer V tomto příkladu je korelace odpovědi na žádost nakonfigurovaná u páru Receive/SendReply .

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.  

Místo explicitní konfigurace korelace CorrelationScope je možné použít aktivitu. CorrelationScope poskytuje implicitní CorrelationHandle aktivity zasílání zpráv, které obsahuje. V tomto příkladu Receive/SendReply je dvojice obsažena uvnitř objektu CorrelationScope. Nevyžaduje se žádná explicitní konfigurace korelace.

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.  

Pokud jsou požadovány další korelace, je možné je nakonfigurovat pomocí CorrelationInitializers vlastnosti příslušných aktivit zasílání zpráv pomocí požadovaných CorrelationInitializer typů.

Použití korelace v obousměrné operaci s metodou Send/ReceiveReply

Receive I když aktivitu lze použít pouze ve službě pracovního postupu hostované WorkflowServiceHostpomocí a SendSend/ReceiveReply pár lze použít v jakémkoli pracovním postupu, který musí vyvolat metodu ve webové službě. Pokud je pracovní postup hostovaný pomocí WorkflowServiceHost výchozí korelace popsané v předchozí části, ale pokud ne, musí být korelace nakonfigurována buď explicitně pomocí požadovaného a CorrelationInitializerCorrelationHandlenebo pomocí implicitního popisovače správy CorrelationScope.

Při použití odkazu na službu přidat odkaz na službu s obousměrnými operacemi se vygenerují aktivity, které interně zabalí Send/ReceiveReply aktivitu páru s explicitně zadanou korelací požadavku/odpovědi.