Генерация отдельных "модельных" классов из службы WCF - PullRequest
4 голосов
/ 02 марта 2010

Я хотел бы иметь возможность создавать отдельные классы (по одному классу на файл) для каждого контракта данных или типа XML в веб-службе WCF.

Я прочитал документацию svcutil , и, если я не слишком быстро пробежался, не похоже, что инструмент поддерживает это поведение.

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

Я знаю, что svcutil (и интеграция VS) можно настроить для использования уже существующих классов моделей в другой сборке. Это проблема курицы и яйца, хотя; Я действительно не хочу писать 50 классов вручную, которые (по крайней мере, на данный момент) почти идентичны сгенерированным классам. И, конечно же, мне нужно добавить все атрибуты DataContract с пространствами имен и другими атрибутами WCF ... это больно.

Моя конечная цель - создать модель представления / предметной области, полностью независимую от модели обслуживания, но у меня пока нет циклов для этого. Я думаю, что создание искусственной модели, которая в конечном итоге может быть преобразована в настоящую модель презентации, было бы хорошим, быстрым и простым способом начать этот путь. После этого я могу настроить ссылки на службы для использования сгенерированных отдельно прокси-классов и начать выделять что-то более надежное.

Можно ли это сделать? Есть ли варианты для svcutil, которые позволят ему генерировать один класс на файл? Или есть другой инструмент, который может это сделать?

1 Ответ

0 голосов
/ 02 марта 2010

Я не знаю ни одного инструмента, который бы поддерживал это в настоящее время - я бы хотел знать о таком инструменте сам, если он существует!

Если у вас есть циклы, чтобы атаковать это самостоятельно, вы могли бы

  • получить WSDL службы из URL (или загрузить его из файла)
  • анализирует классы XML, определенные во встроенной XML-схеме
  • использовать что-то вроде шаблонов T4 или другой механизм для генерации кода C # из этих XML-схем

Это определенно возможно - и, возможно, даже не так сложно - но у кого есть время, чтобы сделать это? : -)

...