c# - 您如何管理网络服务的变更?

标签 c# web-services api soap

随着时间的推移,您的网络服务可能会发生变化,您会做什么以及如何管理变化? (不同版本;添加更多功能、修改甚至删除功能等)

最佳答案

通常,对于非破坏性更改(主要是方法的添加),您可以在同一端点中扩展服务契约(Contract)/实现。再次强调,当我说非破坏性更改时,它意味着语法和语义的更改。

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

此外,有时服务更改不是在方法中,而是在输入/输出数据中。有时可以通过对数据结构进行版本控制来解决这些问题。例如,接受 XML 输入的函数可能开始支持输入中的附加数据/标签。在这种情况下,您可以将其托管在同一端点上,然后根据数据找出客户端正在发送的内容。尽管如此,在这种情况下我更愿意有另一种方法或新的终点。

最后,您还可以在服务接口(interface)中使用可以发出版本信息或验证客户端提供的版本信息的方法,以告诉它服务实现是否与其构建的任何服务合约兼容。这允许客户端在不兼容或不正确配置的情况下给出友好的消息。这种场景的另一种变化是向客户端返回兼容服务版本的端点地址(兼容服务的动态发现)。

关于c# - 您如何管理网络服务的变更?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3930193/

相关文章:

api - 考虑在您的配置中定义类型为 'javax.servlet.ServletContext' 的 bean

ruby-on-rails - 如何使用单例重构包装器来设置 session ?

c# - 内存不足,无法创建 Excel 工作簿

c# - 使用 .Net 持久存储加密数据

c# - Web 服务抛出的自定义异常未被客户端视为相同类型(使用共享程序集)

C++ win32 从资源加载字符串

c# - Windows 不变文化之谜

c# - 使用 Dapper 映射嵌套对象列表(3 级嵌套对象)

c# - 使用 JSON 序列化/反序列化 TimeSpan

c# - 我如何与 Kronos API 通信?