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


Общие сведения о корреляции

Данный раздел относится к версии Windows Workflow Foundation 4.

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

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

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

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

Корреляция, основанная на протоколе

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

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

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

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

См. также

Задачи

Корреляция по содержимому
Калькулятор с корреляцией