请求-回复关联与 Receive/SendReply 对一起使用,以在工作流服务中实现双向操作,并与Send/ReceiveReply 对一起使用,以调用另一个 Web 服务中的双向操作。 在 WCF 服务中调用双向作时,该服务可以是传统的基于代码的 Windows Communication Foundation (WCF) 服务,也可以是工作流服务。 若要使用请求-回复关联,必须使用双向绑定,例如 BasicHttpBinding。 无论是调用还是实现双向操作,相关初始化步骤都类似,将在本节中进行介绍。
在双向操作中配合使用相关和 Receive/SendReply
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.
显式初始化请求-答复相关
如果其他双向操作是并行的,则应显式配置相关性。 这可以通过指定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 向其包含的消息传递活动提供隐式 CorrelationHandle。 在此示例中,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
类型进行配置。
在双向操作中配合使用相关和 Send/ReceiveReply
Receive 活动只能用于由 WorkflowServiceHost 托管的工作流服务,而 Send 和 Send/ReceiveReply 对可用于必须调用 Web 服务上的方法的任何工作流。 如果使用 WorkflowServiceHost 承载工作流,将应用上一节中介绍的默认相关,否则,必须显式使用所需 CorrelationInitializer 和 CorrelationHandle,或者使用 CorrelationScope 的隐式句柄管理来配置相关。
如果在具有双向操作的服务上使用“添加服务引用”,生成的活动将使用显式指定的请求/答复相关在内部包装 Send/ 对活动。ReceiveReply