2010-10-14 20 views
2

随着时间的推移您的Web服务可能会改变,你会怎么做?如何应对变化? (不同的版本;添加更多的功能,修改甚至删除功能等)如何使用Web服务管理更改?

回答

3

通常,对于非重大更改(主要是方法的添加),您可以在同一个终点扩展服务合同/实现。再说一次,当我说非破坏性变化时,它意味着语法和语义的变化。

否则,做干净的方法是举办不同的终点新的服务版本都在一起。在关闭旧版本之前,让客户有机会逐渐迁移到新版本(如果需要)。很多时候,您可以使用幕后的大部分服务实现并减少工作量。

此外,有时服务变化并不的方法但在输入/输出数据。这些可以通过版本化数据结构来解决。例如,接受XML输入的函数可能会开始支持输入中的附加数据/标记。在这种情况下,您可以将其托管在相同的端点上,然后根据数据确定客户端正在发送的内容。虽然,我宁愿在这种情况下有另一种方法或新的终点。

最后,你可以有也有你的服务接口方法可以发出版本信息或验证由客户提供的版本信息告诉它的服务实现是否与任何服务合约已内置兼容。这允许客户在出现不兼容或配置不正确的情况下发送友好的消息。这种情况下的另一种变化可以是向客户返回兼容服务版本的端点地址(兼容服务的动态发现的种类)。

1

我想补充一点,可以使用相同的代码在后端,但只返回不同的输出新的端点。

如果变化是足够小(如只是一个新的属性),那么理想情况下,你可以只更新现有服务端点的输出;将新的特性添加到输出中并让较老的客户端忽略它。但问题在于,soap的使用者(特别是在.NET世界中)使用工具生成静态代理,这些代理非常不灵活,无法更改。