2009-01-07 31 views
0

我們目前正在構建一個系統,該系統從其他一些系統中抽象出關於Web服務的各種技術細節。這有點像企業總線,但它做得更多。將數據導入Windows Workflow實例

我們決定使用Windows Workflow處理請求。只要我們確定要求採取何種行動,我們就會開始專門設計來處理行動的工作流程。 現在,我們要調用的一些Web服務是異步的,所以工作流程應該等待一個答案。 其基本思想是我們將在我們的末端實現回調Web服務,並且當回調「以某種方式」將數據提供給正在等待答案的正在運行的工作流。

到目前爲止,我已經看到了兩種可能性:

  1. 的ExternalDataExchangeService加入
  2. 的WorkflowQueuingService

第一服務是相對容易使用,但基於事件的,所以如果你錯過該事件,你錯過了數據。我們需要一個基於隊列的解決方案,因爲即使在獲得同步響應之前,從技術角度來說,我們也可能會收到來自Web服務的回調,這會告訴我們很快會收到回調。

第二項服務看起來很完美,但它的使用方式非常有限。 將物品放入隊列非常簡單,但我們需要確保隊列存在,然後才能做到這一點。創建隊列似乎只能在活動的執行覆蓋中進行。 因爲我們有很多不同的工作流程,所以我們有一個基本的工作流程類,它在Initialize覆蓋中做了一些工作,並且非常想在那裏做隊列創建,所以我們不需要創建一個特殊的「Initialize」每個工作流程都應該開始的活動。我們還希望收到有關收到新項目的基礎類的通知。所以特定的工作流只需要等待WaitHandle就可以知道隊列中有數據。 最後,我們希望能夠從特定工作流上的代碼活動中讀取隊列中的數據(在發出WaitHandle之後)。

有沒有人有一個想法,不必與我提到的兩個服務,但我們真的想保持儘可能簡單的事情。

回答

0

原來我的假設是錯誤的。我100%肯定自己已經測試過這個場景並遇到了問題,但是在與同事討論之後,我重新測試了它,並且ExternalDataExchangeService工作得很好。所以不需要找到更復雜的解決方案,現在我們只需要使用ExternalDataExchangeService。

1

在WF中,運行時間或服務與實際工作流程之間的所有通信均基於隊列。 ExternalDataExchangeService似乎使用事件,但這些只是WorkflowQueuingService和WorkflowQueue機制的一個薄層。

通常我更喜歡使用WorkflowQueuingService,因爲它可以完全控制。一旦理解了基本知識,在大多數情況下使用ExternalDataExchangeService更容易。