代码之家  ›  专栏  ›  技术社区  ›  ng5000

扩展WebService而不影响现有客户端-从查询返回派生类型

  •  1
  • ng5000  · 技术社区  · 17 年前

    如果我有一个web服务方法,例如。

        [WebMethod]
        [XmlInclude(typeof(SportsCar)), XmlInclude(typeof(FamilyCar))]
        public Car[] GetCars()
        {
            Car[] cars = new Car[2];
            cars[0] = new FamilyCar();
            cars[1] = new SportsCar();
            return cars;
        }
    

    如果我想在我的服务中添加一种新的汽车类型,我必须在web方法中添加一个新的XmlInclude属性。不幸的是,客户端(AFAIK)现在需要更新其web服务引用、重建和重新部署。否则,他们将收到XML文档生成错误。

    有什么策略可以解决这个问题?

    谢谢。

    1 回复  |  直到 17 年前
        1
  •  2
  •   Marc Gravell    17 年前

    如果你的客户还不能理解不同的汽车,也许最可靠的选择是将其视为封闭的,并添加一个单独的方法:

    [...attributes...]
    public Car[] GetCars2()
    

    即只有新的呼叫者 GetCars2 方法将永远可见 SportsCar 结果。将其发挥到极致,你可以有一个v2端点,并保持原始v1不变。然后,您可以随时将客户端迁移到新的API。