3

this question相關。使用WorkflowServiceHost進行WF4工作流版本化

我瞭解如何使用WorkflowApplication實施工作流的版本控制。如果您保留舊版工作流的原始XAML定義,則可以使用正確的WorkflowApplication構造函數加載它們。

如何確保WorkflowServiceHost在希望託管IIS中的工作流時使用正確的工作流定義?

有一個WorkflowServiceHost構造函數,您可以使用它來加載工作流定義,但是當您通過XAMLX文件託管IIS時,您自己不會調用WorkflowServiceHost,這由IIS以某種方式處理。那麼,如何確保爲我的工作流程的正確版本加載正確的工作流程定義?

回答

8

使用WorkflowServiceHost的方法與使用WorkflowApplication的方式並不完全相同。保持各種XAML(X)版本的基礎仍然適用。因此,在WorkflowServiceHost的情況下,您需要創建多個WorkflowServiceHost,每個託管XAMLX的不同版本。每個都有不同的端點。所以基本上,en端點都是針對工作流服務及其版本。

那麼如何從客戶端獲取消息到正確的WorkflowServiceHost?這裏的WCF路由服務是你的朋友。客戶端不需要直接與您的WorkflowServiceHost進行通信,而是使用中間WCF路由服務。這又會檢查消息並將它們路由到託管相應XAMLX文件的WorkflowServiceHost。那麼它是如何知道的。有幾種方法可以這樣做。例如,使用消息關聯標識符進行數據庫查找,請求新的工作流程始終進入最後一個版本。最簡單的方法是讓工作流服務返回版本號作爲初始請求的一部分,並將其作爲每個後續請求的必需部分。通過這種方式,WCF路由服務可以僅處理消息數據發送。

這方面的一個例子是:

  1. 客戶端發送消息開始使用順序ID 7新的工作流,並接收版本3回。客戶端應用程序使用URL httl://localhost/MyWorkflow.xaml,路由服務轉發到最後一個版本的httl://localhost/MyWorkflow.v3.xamlx。
  2. 它發送到工作流的下一條消息包含orderid和版本3.客戶端應用程序使用URL httl://localhost/MyWorkflow.xaml,路由服務轉發到httl://localhost/MyWorkflow.v3.xamlx,它是指示的版本。
  3. 客戶端應用程序想要發送消息到舊的工作流程。它使用orderid 2和版本1(在此工作流程啓動時回覆)。客戶端應用程序使用URL httl://localhost/MyWorkflow.xaml,並且路由服務轉發到httl://localhost/MyWorkflow.v1.xamlx,這是指示的版本。

有關WCF路由服務的更多信息,請參閱these screencasts。

+0

感謝您的精心解答,我明白了。花費相當多的管道來完成這件事。 – 2010-03-14 17:43:57

+2

是的,它是尚未完全烘焙的領域之一。 – Maurice 2010-03-14 19:30:23

+0

嗨!我有一個關於版本控制的小問題。那麼工作流中引用的程序集呢?我有我的DLL部署在我的主機站點內的bin目錄中的wf ..但是當我複製我使用的一個程序集的一個新版本(與一些業務邏輯內部),打破我的持久實例..我迷路了這裏..謝謝!(ps。對不起,我的英語很爛!) – pabloide86 2010-11-29 20:28:21