Службы данных WCF Как добавить Business Logic или использовать существующие объекты CSLA

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

Я работаю над созданием конечной точки службы для базы данных CRM, используемой для внутреннего использования. Несколько приложений хотят читать и записывать в эту базу данных, поэтому использование службы WCF кажется лучшим подходом.

Я начал с использования Entity Framework для ORM, CSLA для уровня Business Logic и стандартного сервиса WCF для связи с клиентскими приложениями. Все шло отлично, пока я не взглянул на WCF Data Services и не был соблазнен прекрасным интерфейсом REST, простотой использования клиентами AJAX и радостью от использования новых технологий!

Теперь я заменил большие части служб WCF одной службой данных WCF, которая напрямую предоставляет модель Entity Framework, минуя уровень CSLA. Это прекрасно работает для операций только для чтения, но я не могу выполнять другие функции CRUD без некоторой бизнес-логики.

Я искал Interceptors, и я, конечно, могу поместить туда бизнес-логин, но на самом деле я хочу перехватить операцию POST/Add, сопоставить значения с соответствующим классом CSLA BusinessBase и позволить этому выполнить всю проверку и окончательное сохранение в база данных. Я попробовал это, и хотя объект CSLA работает как задумано, базовая платформа WCF Data Service также сохраняет свою версию, поэтому я получаю две записи в БД.

Поэтому у меня есть несколько вопросов:

1) Могу ли я полностью перехватить запрос на изменение, позволить собственным бизнес-объектам обработать его, а затем отменить службу данных WCF, не вызывая исключения?

2) Существует ли лучший / стандартный подход для добавления уровней бизнес-логики в стек службы данных WCF? Я не смог найти один до сих пор.

Заранее спасибо,

Дейв

1 ответ

К сожалению, если основным провайдером для WCF Data Services является Entity Framework, вы не можете сделать все это самостоятельно. В настоящее время мы не поддерживаем полностью заменяющие части конвейера обработки в этом случае.

С другой стороны, вы можете играть в некоторые трюки. Вы можете сделать это в основном на основе сущности. Последняя версия EF должна позволить вам переопределить вызов SaveChanges так, чтобы вы могли делать там все, что захотите. Таким образом, идея заключается в том, что вы самостоятельно обрабатываете операцию добавления в своем приемнике изменений, а затем в SaveChanges отменяете изменения, созданные службами данных WCF, и отправляете изменения только из перехватчика изменений. Или, может быть, даже лучше, просто сделайте все в SaveChanges.

Могут быть и другие приятные трюки с EF, которые службы данных WCF могут просто использовать, не зная, но я не эксперт EF, чтобы сказать наверняка.

В настоящее время перехватчики являются стандартным способом наложения бизнес-логики на службы данных WCF (которые работают для любого поставщика, включая EF).

Другой способ сделать это - немного отойти от REST. Вы можете запретить запросы POST к данному набору сущностей (вы можете выбросить их из перехватчика изменений) и добавить операцию службы для выполнения добавления в свой собственный код. В этом случае у вас будет полный контроль, но с клиентами будет немного сложнее работать.

Другие вопросы по тегам