Información general de correlación

Correlación es el mecanismo para relacionar mensajes de servicio de flujo de trabajo entre sí o con el estado de instancia de aplicación, como una respuesta con una solicitud inicial o un identificador de orden determinado con el estado persistente de un flujo de trabajo de procesamiento del orden. En este tema, se proporciona información general sobre la correlación. Los otros temas de esta sección proporcionan información adicional para cada tipo de correlación.

Tipos de correlación

La correlación puede estar basada en protocolos o basada en contenidos. Las correlaciones basadas en protocolos usan datos proporcionados por la infraestructura de entrega de mensajes para proporcionar la asignación entre los mensajes. Los mensajes que se correlacionan utilizando una correlación basada en protocolos se relacionan entre sí mediante un objeto en la memoria, como RequestContext, o a través de un token proporcionado por el protocolo de transporte. Las correlaciones basadas en contenidos relacionan los mensajes entre sí mediante datos especificados por la aplicación. Los mensajes que se correlacionan utilizando la correlación basada en contenidos se relacionan a entre sí mediante ciertos datos definidos por la aplicación en el mensaje, como un número de cliente.

Las actividades que participan en la correlación usan una clase CorrelationHandle para unir las actividades de mensajería. Por ejemplo, una clase Send que se utiliza para llamar a un servicio, y una clase Receive subsiguiente que se utiliza para recibir una devolución de llamada del servicio, comparten la misma clase CorrelationHandle. Se utiliza este patrón básico si la correlación se basa en contenidos o en protocolos. El identificador de correlación se puede establecer explícitamente en cada actividad o las actividades se pueden contener en una actividad CorrelationScope. Las actividades contenidas en CorrelationScope tienen sus identificadores de correlación administrados por CorrelationScope y no necesitan que CorrelationHandle se establezca explícitamente. Un ámbito CorrelationScope proporciona una administración CorrelationHandle para una correlación de solicitud-respuesta y un tipo de correlación adicional. Los servicios de flujo de trabajo hospedados utilizando WorkflowServiceHost tienen la misma administración de correlación predeterminada como actividad CorrelationScope. Esta administración de correlación predeterminada suele indicar que, en muchos escenarios, las actividades de mensajería en CorrelationScope o un servicio de flujo de trabajo no requieren el establecimiento de CorrelationHandle, a menos que varias actividades de mensajería se produzcan en paralelo o se superpongan, como dos actividades Receive en paralelo o dos actividades Send seguidas por dos actividades Receive. Puede obtener más información sobre la correlación predeterminada en los temas de esta sección que cubren cada tipo específico de correlación. Para obtener más información sobre las actividades de mensajería, consulte Actividades de mensajería y Procedimiento para crear un servicio de flujo de trabajo con actividades de mensajería.

Correlación basada en protocolos

La correlación basada en protocolos usa los mecanismos de transporte para relacionar mensajes entre sí y la instancia adecuada. Algunas correlaciones protocolares proporcionadas por el sistema incluyen una correlación de solicitud-respuesta y una correlación basada en contextos. Una correlación de solicitud-respuesta se utiliza para correlacionar un par único de actividades de mensajería para formar una operación bidireccional, como una clase Send emparejada con un miembro ReceiveReply o una clase Receive emparejada con una clase SendReply. El diseñador de flujo de trabajo WCF también proporciona un conjunto de plantillas de actividad para implementar este patrón rápidamente. Una correlación basada en contextos se basa en el mecanismo de intercambio de contexto que se describe en la especificación de protocolo de intercambio de contexto de .NET. Para utilizar la correlación basada en contextos, debe usarse un enlace basado en contextos como BasicHttpContextBinding, WSHttpContextBinding o NetTcpContextBinding en el extremo.

Para obtener más información sobre la correlación de protocolos, consulte Dúplex duradero y Solicitud-respuesta. Para obtener más información sobre el uso de las plantillas de actividad del Diseñador de flujo de trabajo de Visual Studio, consulte Actividades de mensajería. Para obtener un código de ejemplo, consulte el ejemplo de NetContextExchangeCorrelation.

Correlación basada en contenidos

La correlación basada en contenidos usa cierta información en el mensaje para asociarlo a una instancia determinada. Al contrario que la correlación basada en protocolos, la correlación basada en contenidos requiere que el autor de la aplicación establezca explícitamente dónde se pueden encontrar estos datos en cada mensaje relacionado. Las actividades que usan correlación basada en contenidos especifican estos datos de mensaje utilizando MessageQuerySet. La correlación basada en contenidos es útil al comunicarse con servicios que no usan uno de los enlaces de contexto, como BasicHttpContextBinding.

Consulte también