2012-09-20 50 views
3

我正在處理一個業務問題,該問題必須導入具有1000條記錄的文件。每條記錄必須在工作流程中註冊爲單個記錄,必須通過自己的工作流程。一次爲大量記錄創建工作流服務實例

WF4 Corporate Purchase Process示例有一個很好的解決方案,因爲它在第一步中爲所有必需的記錄標識創建書籤。因此,工作流程可以通過每個記錄/ ID的其餘操作來恢復。

  1. 我想知道如何使用工作流服務來實現同樣的事情,因爲我可以從我的工作流中獲得AppFabric的好處。
  2. 是否有任何其他解決方案來處理一批記錄/ ID?否則,工作流服務必須被調用1000次才能註冊工作流實例中的每條記錄,這不是一個好的解決方案。

回答

1

我想知道如何使用工作流程服務來實現同樣的事情,我能得到的AppFabric的好處我工作流程。

這很簡單。您將擁有一個讀取文件的工作流程,並使用存在的循環活動遍歷結果。然後,在循環內部,您將通過調用端點Send活動啓動每個記錄需要(「服務」)的工作流程。

現在,因爲這是服務的工作流程,你會在那也有CanCreateInstance工作流設置true的頂部有一個Receive活動。 Receive之後的所有內容與其他工作流程沒有區別。您可以考慮在Receive後面緊跟Send活動,以便讓來電者知道該服務已啓動。但這不是要求--將是必需的,因爲它迫使WF建立工作流程以使用WorkflowServiceHost

是否有任何其他解決方案來處理一批記錄/ ID?否則,工作流服務必須被調用1000次才能註冊工作流實例中的每條記錄,這不是一個好的解決方案。

您是否指示Web服務器接收1000個請求不是一個好的解決方案?考慮一下這樣一個事實,即IIS服務器可以處理大約25-50個請求,其中每個內核即時,每個內核。現在考慮的是,你是循環與加載的工作流程是不會平均超過也許 5在瞬間的時間,但可能更喜歡1或2

我不認爲網絡服務器將成爲你的問題。我已經通過一個循環啓動了服務器上的10,000個工作流程,就像您將要構建的那個循環一樣,並且沒有出汗。

+0

感謝您的答案邁克。我的業務問題在文件導入後開始。可以說這個需求需要處理其他公司的發票。因此,我的解決方案必須爲每張發票啓動工作流程,該發票將根據發票原始所有者提供的流程通過自己的一套步驟。因此我正在尋找文件導入後調用WF服務的選項。 – Koolb

+0

@Koolb,相同的主體,只是外部工作流程不會導入文件並從其他地方獲取其列表。無論哪種方式,您都需要一個協調員來啓動每個單獨的工作流程。合理? –

+0

是的。我同意將ID列表發送到外部工作流程將是最佳解決方案。不過,我需要爲第二個工作流程爲每個ID創建書籤。然後,我可能不得不在循環中調用內部工作流的Receive方法來創建自動書籤,但我可能會選擇net.pipes來提高性能。 – Koolb

0

一種方法是使用WCF的MSMQ綁定啓動您的工作流程。請求可以通過HTTP正常進入,WCF將它們路由到MSMQ並處理負載。您可以通過MSMQ綁定+ IIS設置來限制使用多少個工作流實例。

下載說明如何設置與WCF和MSMQ工作流應用程序這個word文檔:http://www.microsoft.com/en-us/download/details.aspx?id=21245

+0

我沒有想過隊列。這應該是一個很好的解決方案,我的問題 – Koolb

0

本着實現最簡單的工作原理,您可以將子工作流程作爲活動引入主工作流程,並使用並行處理爲每個文件執行每個輸入的分支。不需要額外的調用,工具支持開箱即用,因爲所有工作流程都是活動。將主流程託管在服務中,以避免與其他IIS用戶(他們可能是真實的用戶)爭用,這可能是一個好主意。

我確實同意調用IIS或WCF服務1000次是不成問題的,除非你想在幾秒鐘內完成!

請務必記住,關於工作流程的一個好處是它的開銷相當低(與其他工作流程產品相比),所以您應該更關心工作流程,而不僅僅是啓動大量實例。批處理像你的例子的想法是非常普遍的。

+0

感謝您的回答。我的解決方案必須處理大量的發票作爲業務問題的一部分。發票所有者可能會有所不同,每張發票都會經過其所有者提供的步驟。不過很好,你澄清wf的低開銷。我可以想到一個基於它的解決方案。 – Koolb

相關問題