C# 我是否可以在不影响现有客户端的情况下修改/扩展生产web服务?

C# 我是否可以在不影响现有客户端的情况下修改/扩展生产web服务?,c#,.net,asp.net,vb.net,web-services,C#,.net,Asp.net,Vb.net,Web Services,我当前正在调用一个web服务,该服务返回一个服务定义的类,我正在应用程序中解释该类。我正在考虑要求这个web服务的供应商为这个类添加一个属性,这将使我的生活以及他们的其他客户的生活更加轻松。明确地说,我并没有要求他们修改现有的行为或属性,所以这将扩展现有的功能 我的问题是,如果他们将此属性添加到类中,是否会对现有客户端的应用程序产生不利影响?是的,这可能意味着如果您没有更新代理,则会出现序列化错误。最好是对服务接口进行版本化,即使这意味着同时支持多个版本。除了要求第三方承担开发(他们通常不愿意这

我当前正在调用一个web服务,该服务返回一个服务定义的类,我正在应用程序中解释该类。我正在考虑要求这个web服务的供应商为这个类添加一个属性,这将使我的生活以及他们的其他客户的生活更加轻松。明确地说,我并没有要求他们修改现有的行为或属性,所以这将扩展现有的功能


我的问题是,如果他们将此属性添加到类中,是否会对现有客户端的应用程序产生不利影响?

是的,这可能意味着如果您没有更新代理,则会出现序列化错误。最好是对服务接口进行版本化,即使这意味着同时支持多个版本。

除了要求第三方承担开发(他们通常不愿意这样做)之外。修改/扩展web服务可能需要停机时间,这可能非常重要。这也会影响API的向后兼容性


如果属性包含大量附加数据,这些数据将不必要地传播到所有客户端,则还需要考虑性能问题。

这可能是一个潜在问题,是的:

  • 当从服务器接收到意外属性时,旧客户端可能会呕吐
  • 当没有从旧客户端接收到预期的属性时,服务器可能会呕吐
它也可以工作。。。它只需要测试/规划


一个更安全的选项(如果你有一个复杂的部署,不能同时进行)是考虑API密封,并添加一个新的“V2”端点等

给定这个供应商的过去行为,我可以预见,由于未来的维护开销,他们不想这样做。理论上,现有客户端代理中的序列化不应该忽略其他属性吗?它可以工作,但是如果我有多个客户端在使用这个接口,我就不会冒这个险了-我如何确保它们都能正常测试等等。所以如果你的问题是,如果添加了新属性,.NET是否保证序列化工作?答案是否定的。请记住,这是一个客户端问题-他们甚至可能没有在客户端使用.NET。人们不使用.NET。。。什么。。。傻瓜;-)是的,我已经考虑过了。我要求他们添加的属性实际上是现有属性的扩展,它提供了现有属性上次更改的时间戳——根本没有多少数据。停机时间在过去对他们来说不是问题,我经常遇到这个问题。我想服务器端取决于他们如何编写序列化程序。但是,在客户端代理中,它是否会忽略其他字段?我对.NET web服务代理的了解不够,无法确定这一点。我们是客户端代理:对于web服务,很难确定客户端是谁或什么。。。