Абстрактный тип веб-сервиса как возвращаемое значение - PullRequest
0 голосов
/ 29 августа 2011

Я использую веб-сервисы в своем веб-проекте.
Я написал веб-сервис, который возвращает IEnumerable:

[WebMethod]
public IEnumerable<Something> GetSomething() {
    IEnumerable<Something> result = ....
    ....
    return result;
}

Теперь result может быть любым, что реализует IEnumerable и, следовательно, может быть очень сложным объектом для отправки клиенту.
Как вы думаете? Разве лучше возвращать определенный тип, чем абстрактный тип (потому что не знает возвращаемый тип)?
Например, я могу создать класс DTO для IEnumerable, который содержит простой массив или что-то в этом роде.
Какова лучшая практика для этих проблем?

UPDATE:
Я использую SeriptService с JSon, а не с SOAP Xml. До сих пор я мог возвращать IEnumerable - возможно, потому, что лежащий в основе enumerable был сериализованным элементом. Что ты думаешь?

Ответы [ 2 ]

0 голосов
/ 29 августа 2011

IEnumerable легко сериализуется большинством сериализаторов. Это просто значение, к которому можно обратиться, чтобы получить список элементов.

Одна вещь, о которой вам следует помнить, это то, что в случае, если вы используете возвращение yield для создания перечислимого, тогда код метода, который генерирует перечислимый, будет выполняться, когда сериализатор начнет извлекать объекты из перечислимого и начнет декодировать их. , Таким образом, даже если у вас есть вызов базы данных внутри метода, который генерирует перечисляемое с использованием шаблона yield yield, этот вызов базы данных произойдет после оператора return в вашем веб-методе, т.е. когда сериализатор начнет потреблять перечисляемое.

0 голосов
/ 29 августа 2011

Вообще говоря, это может быть хорошо, если вы укажете конкретный тип вашего объекта, т. Е. В вашем случае Something.

Использование DTO обычно используется только для

  • отделите вашу объектную модель от модели, представленной вашим клиентам через веб-сервис s.t. когда ваша модель меняется, вы не рискуете сломать свой webservice-api
  • для уменьшения объема данных, передаваемых клиенту. Цель состоит в том, чтобы обеспечить максимально возможную производительность вызовов веб-службы, поэтому вам следует оптимизировать данные, отправляемые клиенту.
...