我有一个WebService,另一个应用程序使用它来检索数据。我们需要在检索到的实体上添加新信息。例如,假设您有一个实体Product
,它公开了Name
,Price
,并且您想添加Provider
属性。
通过我已经完成的测试,如果我只更新服务器端的WebService而不是客户端的WebService,一切似乎都可以正常工作:客户端仍然可以工作,但是无法访问new属性,这就是我期望。
我的问题如下:除了无法获取新属性外,在不更新客户端定义的情况下更新实体的服务器端定义是否有任何隐藏影响?
不更新客户端的原因是应用程序的不同层/部分的部署之间存在同步问题。出于这个问题的目的,请考虑我们不想使用新方法来创建新实体,而该新方法将被称为“丰富实体”。
最佳答案
根据客户的不同,它可能会导致不同的问题。如果您发回额外的数据,某些客户端将会爆炸。在这种情况下,您可能想做以下三件事之一:
1-添加可选参数
如果您之前有getProduct(int id)
,则将其更改为getProduct(int id, bool includeProvider = false)
,这将允许您仅返回他们期望的内容,因为较旧的客户端不会在请求中发送includeprovider。
2-剥夺旧电话并添加新电话
添加新方法并贬低旧方法。
3-版本您的Web服务
继续支持您的Web服务,但是在/v2/<webservice>
创建一个新的Web服务,以便您可以通过日志轻松跟踪不同版本的客户端。
我的偏好是1&3
每当我想向通话中添加其他信息时,我只需添加一个新的可选包含,然后在响应xml中包含新元素。每当我进行功能更改或可能违反合同的更改时,我都会创建一个新版本。
注意:如果您提供您的客户,我们将更好地了解它如何处理响应中的其他元素。
关于c# - 更新WebService实体定义的影响,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8448045/