随着时间的推移,您的网络服务可能会发生变化,您做了什么以及如何管理变更? (不同版本;添加更多功能,修改甚至删除功能等)
答案 0 :(得分:3)
通常,对于非中断更改(主要是方法的添加),您可以在相同的端点扩展服务合同/实现。同样,当我说非破坏性变化时,它意味着语法和语义的变化。
否则,最干净的方法是在不同的端点上共同托管新的服务版本。在关闭旧版本(如果需要)之前,让您的客户有机会逐渐迁移到更新版本。很多时候,您可以在幕后使用大部分服务实施并减少工作量。
此外,有时服务更改不在方法中,而在输入/输出数据中。通过对数据结构进行版本控制可以解决这些问题。例如,接受XML输入的函数可以开始支持输入中的附加数据/标签。在这种情况下,您可以将其托管在相同的端点上,然后从数据中找出客户端发送的内容。虽然,我希望在这种情况下有另一种方法或新的终点。
最后,您可以在服务接口中使用可以发出版本信息或验证客户端提供的版本信息的方法,告诉它服务实现是否与它构建的任何服务合同兼容。这允许客户端在不兼容或配置错误的情况下提供友好消息。此类场景的另一个变体可以是返回客户端兼容服务版本的端点地址(兼容服务的动态发现)。
答案 1 :(得分:1)
我会添加一个新端点,它可以在后端使用相同的代码,但只返回不同的输出。
如果变化足够小(就像新属性一样),那么理想情况下你可以只更新现有服务端点的输出;将新的proprety添加到您的输出并让旧客户端忽略它。但问题是肥皂的消费者(特别是在.NET世界中)使用生成静态代理的工具,这些代理非常不灵活。