请求-答复相关
将请求-答复相关与 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 对活动。