在开发过程中考虑以下场景 -
- 我们非常频繁地更改 WCF 服务合同。
- 有一个 Web 应用程序使用这些服务。
- 我们经常在Web应用程序中更新,服务引用。
但是有时当我们忘记这样做时,我们必须调试整个 Web 应用程序,最终发现服务合同已更改。
我们可以在调用服务之前在运行时检测过时的代理吗?
最佳做法是对服务进行版本控制,以允许客户端与其熟悉的接口进行连接。通常,您将一个或两个版本保留为较旧的在线版本,并将任何重大更改作为升级版本添加到服务中。(例如 /myservice/2012/01
然后/myservice/2012/06
)。然后,随着新版本的创建,您可以弃用以前的版本。
第二种做法是实现一个可以调用并用于测试目的的GetVersion()
(或类似)方法。对服务进行初始调用,查看其正在运行的内容,然后针对本地存储的版本号进行测试,并查看是否存在冲突。
有关这方面的更多详细信息,Yoav Helfman有一篇很好的文章,介绍了处理版本更改和更新。
我以前发布过这种事情。
从本质上讲,管理这种情况的一种方法是要求服务使用者声明他们期望每个请求的服务接口版本。
然后,在服务上公开某种类型的错误协定,该协定将允许您识别发生了服务版本不匹配。这意味着消费者可以发现并相应地处理这个特定问题。