2008-12-17 28 views
1

如果我有一個Web服務方法,例如在不影響現有客戶端的情況下擴展WebService - 從查詢返回派生類型

[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文檔生成錯誤。

有什麼策略可以解決這個問題?

謝謝。

回答

2

如果您有尚無法瞭解不同汽車的客戶,也許是最可靠的選擇是把它當作封閉,並添加一個單獨的方法:

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

也就是說,只有新的呼叫者GetCars2方法將會看到SportsCar的結果。考慮到這一點,你可以有一個V2端點,並保持原來的V1不變。然後,您可以隨時將客戶端遷移到新的API。

+0

謝謝 - 我想(但希望不是!),情況就是這樣。 – ng5000 2008-12-17 14:36:57

相關問題