2010-09-09 57 views
0
WorkflowRuntime workflowRuntime = new WorkflowRuntime(); 

ExternalDataExchangeService dataExchangeService; 
dataExchangeService = new ExternalDataExchangeService(); 
workflowRuntime.AddService(dataExchangeService); 

PaymentProcessingService paymentProcessing; 
paymentProcessing = new PaymentProcessingService(); 
dataExchangeService.AddService(paymentProcessing); 

通過上面的代碼,我們的應用程序可以使用paymentProcessing.RaiseXXXXEvent與工作流實例交互。我的問題是:實施這種機制的原則是什麼?我認爲這是一種事件驅動模式,但我該如何實現這個機制,爲什麼?請指出方向或任何參考表示讚賞。工作流引擎如何接收外部事件?

順便問一下,jBPM中有沒有機制? jBPM是否包含像窗口工作流基礎一樣的順序工作流和狀態機工作流?

謝謝!

回答

0

WF定義了一組處理線程調度,工作流程 持久性,事務和工作流跟蹤的核心工作流服務。 WF的設計人員可能已經在運行時引擎本身中嵌入了這些服務的實現,但他們明智地選擇了將它們外部化爲 ,將它們的實現置於可插拔服務中。這使您可以控制。您決定使用哪些服務(某些服務是可選的)以及每種服務使用哪種實現。

WF還支持稱爲本地服務的另一種服務(有時稱爲數據 交換服務)。這是您自己設計和實施的服務。本地服務幾乎可以用於任何目的,但一般用途是便於工作流實例 與主機應用程序之間的通信。與此相反,核心工作流服務每個都有一個Microsoft定義的目的(例如, 持久性,跟蹤)。您可以爲每個核心服務開發替代實現 ,但這不會改變其定義的目的。

讓您的本地服務可用於您的工作流實例。有幾種方法可以做到這一點。最簡單的方法是使用CallExternalMethodActivity並對其進行配置。

此外,該服務應該有一個接口和裝飾[ExternalDataExchange]。

如果您正在考慮編寫您自己的核心服務實施方案,下面是一個鏈接,介紹如何爲您的自己的核心工作流服務提供服務。

http://msdn.microsoft.com/en-us/library/ms734705(v=VS.90).aspx

+0

我想你沒有得到我的意思,我知道你在說什麼,但我的問題是如何MS貫徹「可插拔的服務」,任何示例代碼? – MemoryLeak 2010-09-09 15:12:31

+0

你正在尋找自己的核心服務實現?或者你正在考慮如何編寫本地服務? – pdiddy 2010-09-09 15:21:28

+0

或者你在尋找如何引發一個事件,以便工作流處理它? – pdiddy 2010-09-09 15:33:21