Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Корреляция "Запрос-ответ" используется с парой 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 с явно указанной корреляцией запроса и ответа.