Wcf 面向服务的体系结构和应用程序之间共享的不断发展的对象

Wcf 面向服务的体系结构和应用程序之间共享的不断发展的对象,wcf,soa,business-objects,shared-objects,Wcf,Soa,Business Objects,Shared Objects,我即将开始为各种业务应用程序编写一套WCF服务。这种SOA从一开始就非常不成熟,最终会演变成一个强大的中间件层 不幸的是,我没有编写完整的服务集,然后重新分解应用程序以使用它们,这将是一个随时间推移而完成的迭代过程。我的问题是关于业务对象的演化(更改、添加、删除属性) 例如:如果您的SOA公开了一个返回obj1的服务。app1、app2、app3正在使用该服务。假设app1的对象已更改,我不想更新app2和app3以获得对app1所做的更改。如果更改是一个add属性,那么它可以正常工作,它不会被

我即将开始为各种业务应用程序编写一套WCF服务。这种SOA从一开始就非常不成熟,最终会演变成一个强大的中间件层

不幸的是,我没有编写完整的服务集,然后重新分解应用程序以使用它们,这将是一个随时间推移而完成的迭代过程。我的问题是关于业务对象的演化(更改、添加、删除属性)

例如:如果您的SOA公开了一个返回obj1的服务。app1、app2、app3正在使用该服务。假设app1的对象已更改,我不想更新app2和app3以获得对app1所做的更改。如果更改是一个add属性,那么它可以正常工作,它不会被映射,但是当您删除一个属性时会发生什么?或者将属性从字符串更改为int?您如何管理变更

提前谢谢你的帮助


PS:我确实拍了一张小照片,但显然我需要10的声誉,所以你必须发挥你的想象力……

目标是限制你强迫客户立即做出的改变。他们可能最终不得不做出一些改变,但希望这只是在不可避免的情况下,比如他们落后了多个版本,而你正在逐步淘汰它

非中断更改可以是:

  • 添加可选属性
  • 添加新操作
  • 突破性变化包括:

  • 添加所需的属性
  • 删除属性
  • 更改属性的数据类型
  • 更改属性名称
  • 移除操作
  • 重命名操作
  • 如果明确指定,请更改属性的顺序
  • 更改绑定
  • 更改服务命名空间
  • 更改操作的含义。例如,我的意思是,如果操作总是返回所有记录,但它被更改为只返回某些记录。这将破坏客户端预期的响应
  • 选项:

  • 添加新操作以处理更新的属性和逻辑。修改原始操作背后的代码,以设置新属性并重构服务逻辑(如果可以)。请记住不要更改操作的含义
  • 如果要删除不再支持的操作。您正在强制客户机在某个时候进行更改。您可以在wsdl中添加文档,让客户机知道它已被弃用。如果您让客户机使用您的契约dll,那么您可以使用[Observe]属性(它不是在最终wsdl中生成的,因此您不能将其全部使用)
  • 如果这是一个很大的变化,那么可以很容易地创建新版本的服务和/或接口和端点。Ie v2、v3等,然后在适当的时候让客户端升级到新版本
  • 下面是“Apress-Pro WCF4:实用的Microsoft SOA实现”中的一个很好的流程图,可能会有所帮助