共用方式為


內容交換

本主題僅適用於 Windows Workflow Foundation 4。

內容相互關聯是以 .NET 內容交換通訊協定規格 (英文) 中描述的內容交換機制為基礎。內容相互關聯使用一般熟知的內容標頭或 Cookie,將訊息關聯至正確的執行個體。若要使用內容相互關聯,必須在提供給 WorkflowServiceHost 的端點上使用以內容為主的繫結,例如 BasicHttpContextBindingWSHttpContextBindingNetTcpContextBinding。本主題說明如何使用內容相互關聯,處理工作流程服務中的訊息活動。

使用內容相互關聯

在用戶端必須重複呼叫某個工作流程服務,而該服務是使用其中一種內容繫結來裝載的時候,就會使用內容相互關聯。這個型別的相互關聯,是由工作流程服務中的 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
        }
    }
};
Ee358724.note(zh-tw,VS.100).gif注意:
請注意,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,將會儲存並傳遞這項內容。