【问题标题】:Service reference breaks when web service changesWeb 服务更改时服务引用中断
【发布时间】:2018-10-03 10:38:15
【问题描述】:

我有一个“公共 API”网络服务项目,我也通过服务引用从另一个项目访问它。 Web 服务的方法之一返回自定义对象的数组,但如果 API 升级并且自定义对象以某种方式更改(例如额外的属性),我希望对象的其余部分能够正常映射并且新属性只是出现空白,但整个对象无法映射。有谁知道解决这个问题的方法吗?

【问题讨论】:

  • 等等,字段是在哪里添加的?在 API(即本场景中的后端)中,对吗?那么您希望您的前端(API 的使用者)做什么?期待旧类型,接收新类型,但尽可能将其映射到旧类型?
  • @Flater 基本上,是的。如果我有一个自定义地址对象,其中包含 AddressNameNumber、AddressStreet、AddressTown、AddressCountry、AddressPostcode 等字段,然后我在以后添加 AddressCity,我认为它可以变得足够聪明,以便很好地映射旧字段并将 AddressCity 留在默认值。显然我错了!
  • leave AddressCity at a default value 你的意思是从你的消费者发送数据到你的API?好吧,既然消费者不知道那个字段,为什么你会期望消费者会以某种方式知道它需要将这个特定字段添加到它发送的序列化数据中?
  • 抱歉,我并不清楚。这些是我正在谈论的响应,而不是请求。请求永远不会改变,只是传入一个唯一的地址标识符,它是具有我的项目并不真正关心的新字段的响应。

标签: c# .net service-reference


【解决方案1】:

如果 Web 服务有任何变化,您必须更新引用并构建项目。

【讨论】:

  • 绝对没有办法让它动态化吗?即使我使用 HttpWebRequest 而不是 Web 服务,并且只是将数据从返回的 XML 映射到自定义对象上?为每个可能投入生产的 API 版本创建一个单独的项目版本似乎是一场彻头彻尾的噩梦。
  • 通过使用HttpWebRequest,你可以尝试一下。在这种情况下,除了您自己的逻辑之外,不会创建强类型合约。如果可能的话,我建议您从 Web 服务转移到 Rest API。
  • 原谅我的无知,但是 Rest API 是如何摆脱这个问题的呢?
  • Rest API 对 Json 的支持更好,对类型更宽松。
  • 好的,这是个好消息,谢谢。不幸的是,这不取决于我,但希望我们可以在不远的将来转移到休息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多