2008-12-17 4 views
1

Si j'ai une méthode de service Web, par ex.Étendre WebService sans affecter les clients existants - renvoyer les types dérivés de la requête

[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; 
    } 

Si je veux ajouter un nouveau type de voiture à mon service, je dois ajouter un nouvel attribut XmlInclude la méthode Web. Malheureusement, les clients (AFAIK) devront maintenant mettre à jour leur référence de service Web, reconstruire et redéployer. Sinon, ils obtiendraient une erreur de génération de document XML.

Quelles stratégies existent pour faire face à cela?

Merci.

Répondre

2

Si vous avez des clients qui ne peuvent pas encore comprendre les différentes voitures, peut-être l'option la plus fiable est de le traiter comme fermé, et ajouter une méthode distincte:

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

-à-dire que les appelants du nouveau GetCars2 méthode verra jamais SportsCar résultats. En prenant cela à l'extrême, vous pourriez avoir un point de terminaison v2, et laisser le v1 original inchangé. Vous pouvez ensuite migrer les clients vers la nouvelle API au fur et à mesure.

+0

Merci - J'ai pensé (mais j'espérais pas!) Que ce serait le cas. – ng5000

Questions connexes