2012-07-31 34 views
1

我有兩個工作流服務(狀態機)應該合作並交換信息來完成所需的行爲。狀態不支持的工作流服務和操作

我有問題(但我只有一臺狀態機),有時候我會嘗試發送一個當前狀態不允許的操作。

有兩個問題:1)我要等待的操作超時,要知道上述操作是不允許2)我在「掩蓋」真正超時由於其他問題

到現在爲止,我發現了兩個可能的解決方案:1)我可以更改簽名以返回true(允許)和false(不允許)並將所有操作添加到所有狀態,(不允許操作會觸發自我轉換)2)我總是將所有轉換添加到所有狀態(不允許會觸發自我轉換),但不允許轉換我會發送例外

我想知道哪個是最好的選擇(當然,我也會欣賞其他可能的解決方案)。 我也想知道如何回覆一個異常請求(也許把它扔在try/catch中)。

謝謝

+0

爲什麼不按照異步委託執行模式? StartXXX返回一個IXXXHandler實例,您可以輪詢,阻塞直到完成,或者任何您想要的。你甚至可以編寫代碼,這樣它就可以在空閒的工作流程準備好時繼續運行... – Will 2012-07-31 12:53:28

回答

1

此處的另一個選擇是使用工作流持久存儲中的信息。其中一列包含活動書籤,對於接收活動,這是SOAP操作。您可以有一個單獨的服務爲給定的工作流實例公開該信息。

您仍然需要迎合以下事實:您可能會將消息發送到處於不同狀態的工作流,因爲工作流持久性存儲沒有立即更新(除非您這樣做),並且由於多個人可能將消息發送到相同的工作流實例。儘管如此,這項基本技術運行得非常好,我已經根據工作流的狀態使用它來啓用/禁用UI上的按鈕。

+0

感謝Maurice,你是我等待的權威參考。 無論如何,現在我做的例外,但我可能會嘗試創建此「狀態機元數據服務」 – fra 2012-08-07 14:49:10

+0

對不起,讓你等待,但我在滑翔傘之旅的國家:-) – Maurice 2012-08-07 15:17:37

+0

不要擔心,我猜你是在度假。 我希望你也可以回答其他未解決的問題(推薦的屬性不恢復?) – fra 2012-08-07 15:28:08