Расширение WebService без влияния на существующие клиенты - возврат производных типов из запроса - PullRequest
1 голос
/ 17 декабря 2008

Если у меня есть метод веб-службы, например,

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

Если я хочу добавить новый тип автомобиля в свой сервис, мне нужно добавить новый атрибут XmlInclude в веб-метод. К сожалению, клиенты (AFAIK) теперь должны будут обновить свои ссылки на веб-службы, перестроить и повторно развернуть. В противном случае они получат ошибку генерации XML-документа.

Какие существуют стратегии для борьбы с этим?

Спасибо.

1 Ответ

2 голосов
/ 17 декабря 2008

Если у вас есть клиенты, которые еще не могут понять различные автомобили, возможно, самый надежный вариант - считать его закрытым и добавить отдельный метод:

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

т.е. только те, кто вызвал новый метод GetCars2, будут видеть результаты SportsCar. Принимая это до крайности, вы можете иметь конечную точку v2 и оставить исходный v1 без изменений. Затем вы можете перенести клиентов на новый API по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...