我刚刚使用 WCF 的路由服务成功实现了一个 WF4“版本控制”系统。我有一个 version1 工作流服务,我向其中添加了一个新的 Decision 活动并将其保存为 version2 服务。所以现在我有 2 个端点(具有相同的服务合同,即两个服务的所有接收活动都是相同的)和一个检查消息内容的路由器(对象上的“versionId”字符串,我的所有接收都接受为参数)来决定要命中哪个端点。
我的问题是,虽然在没有对服务合同进行任何更改时这可以正常工作,但如何处理从我的服务合同中添加或删除方法并创建 version3 服务的需要?我最初的想法是,当我将服务引用添加到我的客户端时,我使用最新的工作流服务的端点来获取最新的服务合同。然后,在配置文件中,我将连接的端点更改为路由器的端点。但是如果 v1 和 v2 的合同与 v3 不同,这将不起作用。我的代理将拥有 v3 的方法,而忘记所有关于 v1 和 v2 的信息。
关于如何处理这个问题的任何想法?我应该在我的工作流解决方案中创建一个实际的服务合同接口(而不仅仅是在我的接收活动中提供一个 ServiceContractName)?