2011-10-26 53 views
2

我有同樣的問題描述here異常在BizTalk具有雙向接收端口直接結合

我使用兩個業務流程。第一次編排使用直接綁定通過雙向發送端口調用第二個編排。第二個orchestrion有一個雙向接收端口將結果發送回第一個端口。每件事情都應該如此,但我得到了以下例外。

A response message for two-way receive port "Unknown " is being suspended as the messaging engine could not correlate the response to an existing request message. This usually happens when the host process has been recycled.

和建議的解決方案工程,以及(設置BTS.EpmRRCorrelationToken價值爲隨機值,新的GUID在我的情況下,在第一編排前發送到直接綁定端口,然後在secod流程中,我將inputMessage中的值複製到outputMessage中,因此值保持不變。使用此方法,BizTalk知道如何將響應與調用方)關聯起來。但我不明白爲什麼這會起作用,如果這是解決問題的好方法。該BTS.EpmRRCorrelationToken流程如下: UML

當我不改變BTS.EpmRRCorrelationToken屬性,它是在工藝流程中的所有消息相同,但爲什麼在地球上,如果它可以不改變的BizTalk它,而不是沒有正確地關聯消息?

+0

我再次檢查瞭解決方案,發現我甚至不需要在第二個編排中複製BTS.EpmRRCorrelationToken!我需要做的只是在第一次編排中用新生成的Guid填充「BTS.EpmRRCorrelationToken」。但爲什麼? –

+0

不知道您是否閱讀過這篇文章:http://bveldhoen.wordpress.com/2010/09/05/messaging-only-request-response-correlation/。出於興趣,爲什麼不使用輸出消息(OK,儘管耦合)調用第二個業務流程,或者只是使用單獨的發送和接收端口(以及您自己的關聯)? – StuartLC

+0

我已閱讀文章,謝謝。我不想做額外的工作來建立相關性。我只想要發佈一條消息,並使用專爲消息類型\ context設計的編排。例如,當我發佈帶有「NEW」狀態的消息時,我希望這條消息能被NewMessageOrchestration拾取並處理,而不是通過ProcessedMessageOrchestration或其他處理。 –

回答

1

在你的情況下,改變這個屬性是可以的。

問題是直接綁定。當你使用它時,你實際上會採取更「低級」的方式,不得不處理BTS發佈 - 訂閱機制的工作方式。

發送 - 接收端口訂閱接收具有特定BTS.EpmRRCorrelationToken的消息。因此,當您在消息框(第二個orch)中再次發送接收消息時,接收端口也會抓取它,然後取消訂閱。當你最終嘗試發送回覆時 - 沒有人在等待它。因此,您必須更改該屬性,直到您將響應發送回該端口。