Расширение классов прокси веб-службы

Мне нужно добавить функциональность к вызовам моих веб-сервисов, чтобы перевод объектов и автоматические повторные попытки выполнялись и абстрагировались.

Обычно я переопределяю базовый класс, чтобы добавить дополнительную функциональность, но, поскольку прокси-методы нельзя переопределить, я не могу оставить имена методов одинаковыми. Единственный другой вариант, который я могу придумать, - это использовать ключевое слово «Тени» для достижения того, что я хочу. Теперь мне не нравится идея теней, так как это не совсем ООП, но в этом случае кажется, что это отличное решение.

Какие другие методы используют люди для добавления функциональности в свои прокси-классы веб-сервисов без изменения сгенерированных классов?


person Mr Shoubs    schedule 28.07.2011    source источник
comment
Вы используете справочник службы или веб-справку? Справочник по сервису предоставляет вам гораздо больше инструментов, чтобы делать то, что вы хотите.   -  person John Saunders    schedule 28.07.2011
comment
Веб-ссылка, наша клиентская база использует .net 2.   -  person Mr Shoubs    schedule 28.07.2011
comment
Это очень плохо. Вам следует подумать о том, чтобы обновить их до .NET 3.5 — это всего лишь .NET 2.0 Service Pack 2 плюс несколько новых сборок, включая WCF. Вы могли бы написать какой-то центральный код для выполнения такой сквозной задачи без необходимости писать обертки для каждой операции.   -  person John Saunders    schedule 28.07.2011
comment
Я знаю, но заставить 1000 независимых компаний обновиться — это большая работа. :( У новых клиентов должен быть установлен .net 4, так что в конце концов... однажды... :)   -  person Mr Shoubs    schedule 28.07.2011
comment
Используете ли вы технологию установки? Вы можете сделать распространяемый компонент .NET 3.5 зависимым. В следующий раз, когда они обновят ваше программное обеспечение, они получат .NET 3.5. В качестве альтернативы вы можете сделать эту новую функцию (повторные попытки и т. д.) зависимой от .NET 3.5, поэтому, если им не нужна новая функция, им не нужна .NET 3.5. Но если они установят новую функцию, они получат .NET 3.5.   -  person John Saunders    schedule 28.07.2011
comment
Мы делаем это для новых установок, но для обновления у нас есть собственный инструмент обновления, так как в прошлом у нас было много проблем с прокси. Также клиентов немного раздражает, если мы возимся с чем-то, что установлено на клиентских машинах :/   -  person Mr Shoubs    schedule 28.07.2011
comment
@JohnSaunders позвольте нам продолжить это обсуждение в чате   -  person Mr Shoubs    schedule 28.07.2011
comment
всегда было интересно, что делает эта ссылка...   -  person Mr Shoubs    schedule 28.07.2011


Ответы (1)


Для этого можно использовать принцип Композиция важнее наследования. Например. напишите оболочку вокруг вашего веб-сервиса, чтобы получить желаемую функциональность.

Обновление: пример кода

interface IWebService
{
    void DoStuff();
}

public class MyProxyClass
{
    IWebService service;

    public void DoStuff()
    {
        //do more stuff
        service.DoStuff();
    }
}
person Bas    schedule 28.07.2011
comment
Вы хотите объявить веб-службу как частный объект, а затем иметь методы, которые это вызывают? - person Mr Shoubs; 28.07.2011
comment
должен был подумать об этом, нет особого смысла в интерфейсе, поскольку прокси-классы генерируются для меня. - person Mr Shoubs; 28.07.2011
comment
Да, это было просто для примера. - person Bas; 28.07.2011