如何在叫用的協調流程建立接收訂閱
雖然您可以在啟動 協調流程時透過啟動協調流程 圖形將訊息當做參數傳遞,但在某些情況下,您可能會想要在叫用之後,將訊息從呼叫端協調流程傳送至叫用的協調流程。 例如,您可能不知道會在叫用時傳遞何種訊息,或者其他協調流程可能需要動態地將訊息傳送到叫用的協調流程。
將訊息傳送到叫用之協調流程的方式,就是以相互關聯進行傳遞,讓叫用的協調流程可以建立由相互關聯協助定義的訂閱,然後再使用該訂閱來接收訊息。 然而,您不能只傳入相互關聯便期待叫用的協調流程會根據相互關聯建立訂閱,並可接收訂閱的訊息。 如果您使用該方法,您從呼叫端協調流程傳送至叫用協調流程的訊息將會導致錯誤:「無法路由傳送已發佈的訊息,因為找不到訂閱者。」這是因為下列原因:
在叫用的協調流程中出現競爭條件。
叫用的協調流程沒有認可點將訂閱傳送到 MessageBox 資料庫以進行路由,因此無法接收訊息。
解決此問題的方式之一是執行下列步驟:
在呼叫端協調流程中,擁有啟動接收以接收訊息。 在呼叫端協調流程中收到訊息之後,請初始化相互關聯集,然後透過 啟動協調流程 圖形傳遞相互關聯集和自我相互關聯接收直接系結埠。 您所傳入的連接埠會成為叫用之協調流程中的傳送埠,而且您將使用該傳送埠傳回訊息,以便與呼叫端協調流程同步。
在叫用的協調流程中,透過自我相互關聯的連接埠,將訊息傳回到呼叫端協調流程。 與呼叫端協調流程達成的同步可避免競爭條件,並能在叫用的協調流程中建立要進行路由之 MessageBox 的接收訂閱時提供認可點。
呼叫端協調流程會透過自我相互關聯的連接埠接收訊息,並與叫用的協調流程同步。 請注意,自我相互關聯的連接埠接收並不需要相互關聯實行項目。 現在,您可以從呼叫端協調流程將訊息安全地傳送到叫用的協調流程,而且叫用的協調流程會根據相互關聯接收訊息。
儘管先前的方法可以達成目標,更好的方法卻是傳入訊息以初始化您要在其上接收的相互關聯。 當您透過自我相互關聯的連接埠,使呼叫端協調流程與叫用的協調流程同步時,我們建議您永遠傳入初始化相化關聯所需要的訊息。 下列步驟提供最可靠與最高效能的方法:
在呼叫端協調流程中,擁有啟動接收以接收訊息。 收到訊息之後,請透過 [開始協調流程 ] 圖形傳遞訊息和自我關聯接收直接系結埠。 您所傳入的訊息會在叫用的協調流程中用來初始化相互關聯。 您所傳入的連接埠會成為叫用之協調流程中的傳送埠,而且您將使用該傳送埠傳回訊息,以便與呼叫端協調流程同步。
在叫用的協調流程中,初始化相互關聯,並將訊息傳回到呼叫端協調流程。 與呼叫端協調流程達成的同步可避免競爭條件,並能在叫用的協調流程中建立要進行路由之 MessageBox 的接收訂閱時提供認可點。
呼叫端協調流程會透過自我相互關聯的連接埠接收訊息,並與叫用的協調流程同步。 請注意,自我相互關聯的連接埠接收並不需要相互關聯實行項目。 現在,您可以從呼叫端協調流程將訊息安全地傳送到叫用的協調流程,而且叫用的協調流程會根據相互關聯接收訊息。