內容交換
本主題僅適用於 Windows Workflow Foundation 4。
內容相互關聯是以 .NET 內容交換通訊協定規格 (英文) 中描述的內容交換機制為基礎。內容相互關聯使用一般熟知的內容標頭或 Cookie,將訊息關聯至正確的執行個體。若要使用內容相互關聯,必須在提供給 WorkflowServiceHost 的端點上使用以內容為主的繫結,例如 BasicHttpContextBinding、WSHttpContextBinding 或 NetTcpContextBinding。本主題說明如何使用內容相互關聯,處理工作流程服務中的訊息活動。
使用內容相互關聯
在用戶端必須重複呼叫某個工作流程服務,而該服務是使用其中一種內容繫結來裝載的時候,就會使用內容相互關聯。這個型別的相互關聯,是由工作流程服務中的 Receive/SendReply 配對進行初始化。內容會隨著回覆傳送回到用戶端,然後用戶端對於服務的後續呼叫,就會附加這個內容。
設定工作流程服務中的內容相互關聯
工作流程相互關聯會使用 ContextCorrelationInitializer 初始化,而這會與回覆初始傳入訊息的 SendReply 活動產生關聯。在下列範例中,會設定 SendReply,以便初始化內容相互關聯。
Variable<string> Item = new Variable<string>();
Variable<CorrelationHandle> OrderHandle = new Variable<CorrelationHandle>();
Receive StartOrder = new Receive
{
CanCreateInstance = true,
ServiceContractName = "IOrderService",
OperationName = "StartOrder"
};
SendReply ReplyToStartOrder = new SendReply
{
Request = StartOrder,
CorrelationInitializers =
{
new ContextCorrelationInitializer
{
CorrelationHandle = OrderHandle
}
}
};
注意: |
---|
請注意,Receive/SendReply 配對正在使用預設的要求與回覆相互關聯,而這項相互關聯是由 WorkflowServiceHost 的隱含 CorrelationHandle 管理提供。如需詳細資訊,請參閱要求-回覆. |
工作流程服務中的後續 Receive 活動,可以參考在前一個範例中,由 SendReply 初始化的 CorrelationHandle。
Receive AddItem = new Receive
{
ServiceContractName = "IOrderService",
OperationName = "AddItem",
CorrelatesWith = OrderHandle
};
然後,WorkflowServiceHost 上的端點就會進行設定,並使用以內容為主的繫結,例如 BasicHttpContextBinding。
<endpoint
contract=”IOrderContract”
binding = “basicHttpContextBinding”
address=”https://localhost:8080/OrderService” />
設定工作流程用戶端中的內容相互關聯
如果用戶端是另一個工作流程,也必須在用戶端上設定內容相互關聯。在用戶端工作流程上,最初呼叫工作流程服務之 Send/ReceiveReply 配對的 ReceiveReply,必須利用 ContextCorrelationInitializer 加以設定。
Variable<CorrelationHandle> cchandle = new Variable<CorrelationHandle>();
Send request = new Send
{
// Activity configuration omitted.
};
ReceiveReply reply = new ReceiveReply
{
Request = request,
CorrelationInitializers =
{
new ContextCorrelationInitializer
{
CorrelationHandle = cchandle
}
}
};
相互關聯一旦初始化,後續的 Send 活動就可以使用 CorrelationHandle 來叫用同一個服務執行個體上的方法。
Send request2 = new Send
{
CorrelatesWith = cchandle,
// Remaining activity configuration omitted.
};
請注意,在這些範例中,內容相互關聯已明確設定。如果用戶端工作流程並沒有同時裝載在 WorkflowServiceHost 中,除非這些活動已包含在 CorrelationScope 活動內,否則相互關聯必須明確設定。
如果正在呼叫工作流程服務的用戶端不是工作流程,則只要使用從第一個工作流程服務呼叫傳回的內容,明確將該內容傳遞回到工作流程服務,該用戶端仍然可以重複呼叫。根據預設,透過在 Visual Studio 2010 中加入服務參考而產生的 Proxy,將會儲存並傳遞這項內容。