要求-回覆相互關聯
Request-reply 相互關聯會搭配 Receive/SendReply 組用來實作工作流程服務中的雙向作業,以及搭配在另一個 Web 服務中叫用雙向作業的 Send/ReceiveReply 組使用。 在 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 內的方式達成。 在此範例中,request-reply 相互關聯會在 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 組活動,並且明確指定 Request/Reply 相互關聯。