Visão geral de correlação

Correlação é o mecanismo para relacionar mensagens de serviço de fluxo de trabalho entre si ou ao estado da instância do aplicativo, como uma resposta a uma solicitação inicial ou uma ID de pedido específica ao estado persistente de um fluxo de trabalho de processamento de pedidos. Este tópico fornece uma visão geral de 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 estão relacionadas umas às outras 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 estã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 um CorrelationHandle para unir as atividades de mensagens. Por exemplo, um Send, que é usado para chamar um serviço, e um Receive subsequente, que é usado para receber um retorno de chamada do serviço, compartilham o mesmo CorrelationHandle. Esse padrão básico é usado se a correlação vor baseada em conteúdo ou protocolo. O identificador de correlação pode ser definido explicitamente em cada atividade ou as atividades podem ser contidas em uma atividade CorrelationScope. As atividades contidas em um CorrelationScope têm seus identificadores de correlação gerenciados pelo CorrelationScope e não exigem que o CorrelationHandle seja definido explicitamente. Um escopo CorrelationScope fornece gerenciamento CorrelationHandle 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 atividade CorrelationScope. 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 conjunto CorrelationHandle, a menos que várias atividades de mensagens estejam em paralelo ou se sobreponham, como duas atividades Receive em paralelo ou duas atividades Send seguidas por duas atividades Receive. 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 entre solicitação e resposta e correlação baseada em 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 Designer de Fluxo de Trabalho do Visual Studio também fornece um conjunto de modelos de atividade para implementar rapidamente esse padrão. Uma correlação baseada em contexto tem base no mecanismo de troca de contexto descrito na Especificação do protocolo de intercâmbio de contexto do .NET. Para usar a correlação baseada em contexto, uma associação baseada em 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 Solicitação-resposta. Para obter mais informações sobre como usar os modelos de atividade do Designer de Fluxo de Trabalho do Visual Studio, consulte Atividades do Messaging. Para obter um código de exemplo, consulte o exemplo NetContextExchangeCorrelation.

Correlação conteudo base

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 exige 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 MessageQuerySet. 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.

Confira também