我刚刚成功实现了使用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