我剛剛成功實現了使用WCF路由服務的WF4「版本控制」系統。我有一個版本1工作流服務,我添加了一個新的決策活動並將其保存爲版本2服務。因此,現在我有兩個端點(具有相同的服務合約,即所有接收活動對於這兩個服務都是相同的)和一個檢查消息內容的路由器(對象上的「versionId」字符串,我所有的Receive都接受爲參數)來決定要點擊哪個端點。服務合同更改的WF4工作流版本
我的問題是,雖然這工作正常,但沒有對服務合同進行任何更改時,如何處理需要添加或刪除我的服務合同中的方法並創建版本3服務?我最初的想法是,當我將服務引用添加到客戶端時,我使用最新的工作流服務的端點來獲取最新的服務合同。然後,在配置文件中,我更改了連接到路由器端點的端點。但是,如果v1和v2與v3有不同的合約,這將不起作用。我的代理將有v3的方法,並忘記所有關於v1和v2。
任何想法如何處理?我應該在我的工作流解決方案中創建一個實際的服務合同接口(而不是僅在我的接收活動中提供ServiceContractName)?
我想我不完全從你的回答瞭解我的客戶是如何意識到的服務合同的變更。我想象下面的情況。 V1有3個接聽電話。服務合同是「隱含的」(即我沒有專門創建一個,但在WF設計師的「服務合同名稱」中輸入了一個名稱)。如果V2取消其中一個接收並添加新接收,我如何讓我的客戶明白服務合同應該是2的聯合?我應該在工作流程中更新我的服務合同名稱,以便客戶得到多個服務合同? – Thelonias 2011-03-28 14:19:22
客戶是如何知道原始服務合同是什麼以及以什麼樣的順序進行操作的?我猜是因爲添加服務參考和文檔。改變是一回事。做一個更新服務參考並告訴他們要調用什麼。第一份合同確實沒有什麼區別。 – Maurice 2011-03-28 18:56:41
是的,因爲添加服務引用。不過,我的觀點是,我的客戶仍然需要知道V1服務合同是什麼,以便它可以在持久性存儲中使用V1工作流程。如果我按你說的做,只更新我的服務參考,它只會得到V2的服務合同。我需要2我想的組合。 – Thelonias 2011-03-28 20:32:43