请求-答复相关

请求-回复关联与 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.  

显式初始化请求-答复相关

如果其他双向操作是并行的,则应显式配置相关性。 这可以通过指定CorrelationHandleRequestReplyCorrelationInitializer,或者将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 托管的工作流服务,而 SendSend/ReceiveReply 对可用于必须调用 Web 服务上的方法的任何工作流。 如果使用 WorkflowServiceHost 承载工作流,将应用上一节中介绍的默认相关,否则,必须显式使用所需 CorrelationInitializerCorrelationHandle,或者使用 CorrelationScope 的隐式句柄管理来配置相关。

如果在具有双向操作的服务上使用“添加服务引用”,生成的活动将使用显式指定的请求/答复相关在内部包装 Send/ 对活动。ReceiveReply