Поделиться через


Обзор корреляции

Корреляция — это механизм связи сообщений службы рабочих процессов друг с другом или с состоянием экземпляра приложения, например ответ на первоначальный запрос, или определенный идентификатор заказа на сохраняемое состояние рабочего процесса обработки заказов. В этом разделе представлен обзор корреляции. В других разделах этого раздела содержатся дополнительные сведения для каждого типа корреляции.

Типы корреляции

Корреляция может быть основана на протоколе или на основе содержимого. Корреляции на основе протокола используют данные, предоставляемые инфраструктурой доставки сообщений, чтобы обеспечить сопоставление между сообщениями. Сообщения, коррелированные с помощью корреляции на основе протокола, связаны друг с другом с помощью объекта в памяти, например, RequestContext, или с помощью маркера, предоставленного транспортным протоколом. Корреляции на основе содержимого связывают сообщения друг с другом с помощью данных, заданных приложением. Сообщения, которые коррелируются с помощью корреляции на основе содержимого, связаны друг с другом некоторыми данными, определенными приложением в сообщении, например номером клиента.

Действия, которые участвуют в корреляции, используют CorrelationHandle для связывания действий обмена сообщениями вместе. Например, Send, который используется для вызова службы, и последующий Receive, который используется для получения обратного вызова от службы, используют один и тот же CorrelationHandle. Этот базовый шаблон используется независимо от того, основана ли корреляция на основе содержимого или на основе протокола. Дескриптор корреляции можно явно задать для каждой активности или она может содержаться в действии CorrelationScope. Действия, содержащиеся в CorrelationScope, управляются CorrelationScope и не требуют явного задания CorrelationHandle. Область CorrelationScope предоставляет CorrelationHandle управление корреляцией запрос-ответ и одним дополнительным типом корреляции. Службы рабочих процессов, размещенные с использованием WorkflowServiceHost, имеют такое же управление корреляцией по умолчанию, как и активность CorrelationScope. Это управление корреляцией по умолчанию обычно означает, что во многих сценариях действия обмена сообщениями в CorrelationScope или в службе рабочего процесса не требуют установки своего CorrelationHandle, если только несколько действий обмена сообщениями не выполняются параллельно или не перекрываются, например два Receive действия параллельно или последовательные два Send действия, за которыми следуют два Receive действия. Дополнительные сведения о корреляции по умолчанию приведены в разделах этого раздела, охватывающих каждый конкретный тип корреляции. Дополнительные сведения о действиях обмена сообщениями см. в разделе "Действия обмена сообщениями " и "Практическое руководство. Создание службы рабочих процессов с помощью действий обмена сообщениями".

корреляция Protocol-Based

Корреляция на основе протокола использует транспортный механизм для связывания сообщений друг с другом и с соответствующим экземпляром. Некоторые корреляции протокола, предоставляемые системой, включают корреляцию ответа на запросы и корреляцию на основе контекста. Корреляция "запрос-ответ" используется для сопоставления одной пары действий обмена сообщениями для формирования двусторонней операции, например, Send в паре с ReceiveReply, или Receive в паре с SendReply. Конструктор рабочих процессов Visual Studio также предоставляет набор шаблонов действий для быстрого реализации этого шаблона. Корреляция, основанная на контексте, базируется на механизме обмена контекстом, описанном в спецификации протокола .NET Обмен контекстом. Чтобы использовать корреляцию на основе контекста, привязка на основе контекста, напримерBasicHttpContextBindingWSHttpContextBinding, или NetTcpContextBinding должна использоваться в конечной точке.

Дополнительные сведения о корреляции протоколов см. в разделе "Устойчивый дуплекс " и "Ответ на запрос". Дополнительные сведения об использовании шаблонов действий конструктора рабочих процессов Visual Studio см. в разделе "Действия обмена сообщениями". Пример кода см. в примере NetContextExchangeCorrelation .

Корреляция на основе содержимого

Корреляция на основе содержимого использует некоторую часть информации в сообщении, чтобы связать её с конкретным случаем. В отличие от корреляции на основе протокола, корреляция на основе контента требует, чтобы автор приложения явно указывал, где эти данные можно найти в каждом связанном сообщении. Действия, использующие корреляцию на основе содержимого, указывают эти данные сообщения с помощью MessageQuerySet. Корреляция на основе контента полезна при взаимодействии со службами, которые не используют одну из привязок контекста, BasicHttpContextBindingнапример.

См. также