Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Корреляция "Запрос-ответ" используется с парой Receive/SendReply для осуществления двусторонней операции в службе рабочего процесса и с парой Send/ReceiveReply, чтобы вызвать двустороннюю операцию в другой веб-службе. При вызове двусторонней операции в службе WCF служба может быть либо традиционной императивной службой Windows Communication Foundation (WCF), либо службой рабочего процесса. Чтобы использовать корреляцию "запрос-ответ", необходимо использовать двусторонняя привязка, например BasicHttpBinding. Независимо от того, выполняется ли вызов или реализация двусторонней операции, шаги инициализации корреляции аналогичны и рассматриваются в этом разделе.
Использование корреляции в операции Two-Way с получением и отправкой ответа
Пара Receive/SendReply используется для реализации двусторонней операции в службе рабочего процесса. Среда выполнения использует корреляцию "запрос-ответ", чтобы убедиться, что ответ отправляется в правильный вызывающий объект. Если рабочий процесс размещается с помощью WorkflowServiceHost, что характерно для служб рабочих процессов, то инициализации корреляции по умолчанию достаточно. В этом сценарии Receive/SendReply пара используется рабочим процессом и не требуется определенная конфигурация корреляции.
Receive StartOrder = new Receive
{
CanCreateInstance = true,
ServiceContractName = OrderContractName,
OperationName = "StartOrder"
};
SendReply ReplyToStartOrder = new SendReply
{
Request = StartOrder,
Content = … // Contains the return value, if any.
};
// Construct a workflow using StartOrder and ReplyToStartOrder.
Явная инициализация корреляции Request-Reply
Если другие двусторонние операции выполняются параллельно, необходимо явно настроить корреляцию. Это можно сделать, указав CorrelationHandle и RequestReplyCorrelationInitializer или разместив Receive/SendReply внутри CorrelationScope. В этом примере корреляция "запрос-ответ" настраивается в паре Receive/SendReply .
Variable<CorrelationHandle> RRHandle = new Variable<CorrelationHandle>();
Receive StartOrder = new Receive
{
CanCreateInstance = true,
ServiceContractName = OrderContractName,
OperationName = "StartOrder",
CorrelationInitializers =
{
new RequestReplyCorrelationInitializer
{
CorrelationHandle = RRHandle
}
}
};
SendReply ReplyToStartOrder = new SendReply
{
Request = StartOrder,
Content = … // Contains the return value, if any.
};
// Construct a workflow using StartOrder and ReplyToStartOrder.
Вместо явной настройки корреляции CorrelationScope можно использовать действие. CorrelationScope предоставляет неявную связь с действиями обмена сообщениями, которые в нем содержатся. В этом примере пара Receive/SendReply содержится внутри CorrelationScope. Явной конфигурации корреляции не требуется.
Receive StartOrder = new Receive
{
CanCreateInstance = true,
ServiceContractName = OrderContractName,
OperationName = "StartOrder"
};
SendReply ReplyToStartOrder = new SendReply
{
Request = StartOrder,
Content = … // Contains the return value, if any.
};
CorrelationScope s = new CorrelationScope
{
Body = new Sequence
{
Activities =
{
StartOrder,
// Activities that create the reply.
ReplyToStartOrder
}
}
};
// Construct a workflow using the CorrelationScope.
Если требуются дополнительные корреляции, их можно настроить, используя свойство CorrelationInitializers соответствующих действий обмена сообщениями, с применением требуемых типов CorrelationInitializer
.
Использование корреляции в операции Two-Way с отправкой и получением ответа.
Хотя активность Receive может использоваться только в службе рабочего процесса, размещенной системой WorkflowServiceHost, пара SendSend/ReceiveReply может использоваться в любом рабочем процессе, который должен вызывать метод в веб-службе. Если рабочий процесс размещен с помощью WorkflowServiceHost, то применяются корреляция по умолчанию, описанная в предыдущем разделе, но если нет, то корреляция должна быть настроена явно с помощью требуемых CorrelationInitializer и CorrelationHandle, либо с помощью неявного управления обработчиком CorrelationScope.
При использовании Add Service Reference для службы с двусторонними операциями создаются действия, которые содержат пару действий Send/ReceiveReply с явно указанной корреляцией запроса и ответа.