Несколько ссылок SVC, каждый из которых представляет одни и те же объекты - PullRequest
2 голосов
/ 05 июля 2011

У меня есть приложение WPF, которое использует службы WCF для выполнения операций над объектами, использующими EF4.Моя структура проекта выглядит следующим образом:

Проект: EntityObjects

  • Здесь находится файл edmx

Проект: WCFService

  • Ссылки EntityObjects
  • Имеет контракты данных для выполнения действий над объектами
  • Имеет три различных файла SVC, называемые Partner.svc, Section.svc, Scheme.svc

Проект: DataLayer

  • имеет служебные ссылки на Partner.svc, section.svc, sche.s.scc

Проблема заключается в том, что проект DataLayer имеет неоднозначные ссылки наобъекты, поскольку каждый файл SVC возвращает свои собственные ссылки на объекты объектов.

Как мне обойти это?

Ответы [ 2 ]

3 голосов
/ 06 июля 2011

Так работать не будет. Если вы хотите иметь одинаковые типы контрактов данных среди всех трех ссылок на услуги, вы должны использовать совместное использование контракта данных . Это означает, что ваши контракты данных должны быть предоставлены клиентскому проекту в отдельной сборке до добавления ссылок на сервисы. Чаще всего это означает, что вы будете совместно использовать сборку контракта данных между сервером и клиентом. В вашем случае это означает совместное использование объектов EntityObject со всем EF - это плохо.

Существует несколько решений:

  • Помещение сущностей и EDMX в отдельные проекты и совместное использование проекта только с сущностями
  • Использование пользовательских объектов передачи данных вместо сущностей в качестве контрактов данных и совместное использование сборки с этими DTO
  • Не делиться сборкой, а вместо этого создавать «копии» контрактов данных вручную для клиента
  • Не выставлять одни и те же сущности через разные сервисы
  • Используйте только один сервис, если это имеет смысл в вашей архитектуре

Последние два варианта больше касаются архитектуры вашего приложения.

0 голосов
/ 05 июля 2011

Вы можете:

Создать класс-оболочку, который обернул бы доступ ко всем 3 сервисам.Затем обратитесь к объектам, связанным с проектом DataLayer, напрямую, а не через службу, и выполните преобразование, как требуется в классе оболочки.

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