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