使用WorkflowServiceHost的方法與使用WorkflowApplication的方式並不完全相同。保持各種XAML(X)版本的基礎仍然適用。因此,在WorkflowServiceHost的情況下,您需要創建多個WorkflowServiceHost,每個託管XAMLX的不同版本。每個都有不同的端點。所以基本上,en端點都是針對工作流服務及其版本。
那麼如何從客戶端獲取消息到正確的WorkflowServiceHost?這裏的WCF路由服務是你的朋友。客戶端不需要直接與您的WorkflowServiceHost進行通信,而是使用中間WCF路由服務。這又會檢查消息並將它們路由到託管相應XAMLX文件的WorkflowServiceHost。那麼它是如何知道的。有幾種方法可以這樣做。例如,使用消息關聯標識符進行數據庫查找,請求新的工作流程始終進入最後一個版本。最簡單的方法是讓工作流服務返回版本號作爲初始請求的一部分,並將其作爲每個後續請求的必需部分。通過這種方式,WCF路由服務可以僅處理消息數據發送。
這方面的一個例子是:
- 客戶端發送消息開始使用順序ID 7新的工作流,並接收版本3回。客戶端應用程序使用URL httl://localhost/MyWorkflow.xaml,路由服務轉發到最後一個版本的httl://localhost/MyWorkflow.v3.xamlx。
- 它發送到工作流的下一條消息包含orderid和版本3.客戶端應用程序使用URL httl://localhost/MyWorkflow.xaml,路由服務轉發到httl://localhost/MyWorkflow.v3.xamlx,它是指示的版本。
- 客戶端應用程序想要發送消息到舊的工作流程。它使用orderid 2和版本1(在此工作流程啓動時回覆)。客戶端應用程序使用URL httl://localhost/MyWorkflow.xaml,並且路由服務轉發到httl://localhost/MyWorkflow.v1.xamlx,這是指示的版本。
有關WCF路由服務的更多信息,請參閱these screencasts。
感謝您的精心解答,我明白了。花費相當多的管道來完成這件事。 – 2010-03-14 17:43:57
是的,它是尚未完全烘焙的領域之一。 – Maurice 2010-03-14 19:30:23
嗨!我有一個關於版本控制的小問題。那麼工作流中引用的程序集呢?我有我的DLL部署在我的主機站點內的bin目錄中的wf ..但是當我複製我使用的一個程序集的一個新版本(與一些業務邏輯內部),打破我的持久實例..我迷路了這裏..謝謝!(ps。對不起,我的英語很爛!) – pabloide86 2010-11-29 20:28:21