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

时间:2008-12-17 11:16:29

标签: c# .net wcf

如果我有网络服务方法,例如

    [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 个答案:

答案 0 :(得分:2)

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

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

即。只有新GetCars2方法的来电者才能看到SportsCar个结果。将此情况发挥到极致,您可以拥有v2端点,并保持原始v1不变。然后,您可以将客户端迁移到新的API。