Partilhar via


Visão geral da correlação

Correlação é o mecanismo para relacionar mensagens de serviço de fluxo de trabalho entre si ou com o estado da instância do aplicativo, como uma resposta a uma solicitação inicial ou um ID de pedido específico ao estado persistente de um fluxo de trabalho de processamento de pedidos. Este tópico fornece uma visão geral da correlação. Os outros tópicos desta seção fornecem informações adicionais para cada tipo de correlação.

Tipos de correlação

A correlação pode ser baseada em protocolo ou em conteúdo. Correlações baseadas em protocolo usam dados fornecidos pela infraestrutura de entrega de mensagens para fornecer o mapeamento entre mensagens. As mensagens correlacionadas usando correlação baseada em protocolo são relacionadas entre si usando um objeto na memória, como um RequestContext, ou por um token fornecido pelo protocolo de transporte. Correlações baseadas em conteúdo relacionam mensagens entre si usando dados especificados pelo aplicativo. As mensagens correlacionadas usando correlação baseada em conteúdo são relacionadas entre si por alguns dados definidos pelo aplicativo na mensagem, como um número de cliente.

As atividades que participam da correlação usam a CorrelationHandle para unir as atividades de mensagens. Por exemplo, um Send que é usado para chamar um serviço e um subsequente Receive que é usado para receber um retorno de chamada do serviço, compartilhar o mesmo CorrelationHandle. Esse padrão básico é usado se a correlação for baseada em conteúdo ou em protocolo. O identificador de correlação pode ser explicitamente definido em cada atividade ou as atividades podem estar contidas em uma CorrelationScope atividade. As atividades contidas em um CorrelationScope têm seus identificadores de correlação gerenciados CorrelationScope pelo e não exigem que o CorrelationHandle seja explicitamente definido. Um CorrelationScope escopo fornece CorrelationHandle gerenciamento para uma correlação solicitação-resposta e um tipo de correlação adicional. Os serviços de fluxo de trabalho hospedados usando WorkflowServiceHost têm o mesmo gerenciamento de correlação padrão que a CorrelationScope atividade. Esse gerenciamento de correlação padrão geralmente significa que, em muitos cenários, as atividades de mensagens em um CorrelationScope ou um serviço de fluxo de trabalho não exigem seu CorrelationHandle conjunto, a menos que várias atividades de mensagens estejam em paralelo ou se sobreponham, como duas Receive atividades em paralelo ou duas Send atividades seguidas por duas Receive atividades. Mais informações sobre correlação padrão são fornecidas nos tópicos desta seção que abrangem cada tipo específico de correlação. Para obter mais informações sobre atividades de mensagens, consulte Atividades de mensagens e Como criar um serviço de fluxo de trabalho com atividades de mensagens.

Correlação baseada em protocolo

A correlação baseada em protocolo usa o mecanismo de transporte para relacionar mensagens entre si e com a instância apropriada. Algumas correlações de protocolo fornecidas pelo sistema incluem correlação solicitação-resposta e correlação baseada no contexto. Uma correlação solicitação-resposta é usada para correlacionar um único par de atividades de mensagens para formar uma operação bidirecional, como um Send emparelhado com um ReceiveReply, ou um Receive emparelhado com um SendReply. O Visual Studio Workflow Designer também fornece um conjunto de modelos de atividade para implementar rapidamente esse padrão. Uma correlação baseada em contexto é baseada no mecanismo de troca de contexto descrito na Especificação do Protocolo de Troca de Contexto do .NET. Para usar a correlação baseada no contexto, uma ligação baseada no contexto como BasicHttpContextBinding, WSHttpContextBinding ou NetTcpContextBinding deve ser usada no ponto de extremidade.

Para obter mais informações sobre correlação de protocolo, consulte Duplex durável e Request-Reply. Para obter mais informações sobre como usar os modelos de atividade do Visual Studio Workflow Designer, consulte Atividades de mensagens. Para obter o código de exemplo, consulte o exemplo NetContextExchangeCorrelat .

Correlação baseada em conteúdo

A correlação baseada em conteúdo usa algumas informações na mensagem para associá-la a uma instância específica. Ao contrário da correlação baseada em protocolo, a correlação baseada em conteúdo requer que o autor do aplicativo declare explicitamente onde esses dados podem ser encontrados em cada mensagem relacionada. As atividades que usam correlação baseada em conteúdo especificam esses dados de mensagem usando um MessageQuerySetarquivo . A correlação baseada em conteúdo é útil na comunicação com serviços que não usam uma das associações de contexto, como BasicHttpContextBinding.

Consulte também