Веб-сервисы WCF и получение из базы данных - использовать существующий уровень сервиса asp.net?
Я только начал работать над проектом служб WCF, используя web.api для предоставления данных для мобильной версии нашего существующего веб-приложения asp.net mvc.
До сих пор я использовал этот учебник по началу работы с WCF web.api, чтобы запустить что-то, с поддельными данными, созданными в ServiceContract.
Договор на обслуживание выглядит так:
[WebGet(UriTemplate = "")]
public IQueryable<Workspace> Get()
{
//I want to use our existing service layer like this:
//WorkspaceService service = new WorkspaceService();
//service.ReturnAllWorkspacesByUsername("mary");
//this is fake data for testing
var workspaces = new List<Workspace>()
{
new Workspace() {Id = new Guid(), Title = "Implement WCF Web Services"},
new Workspace() {Id = new Guid(), Title = "Add APIs to WebService"},
new Workspace() {Id = new Guid(), Title = "Map Routes"},
new Workspace() {Id = new Guid(), Title = "Expose Resources"},
};
return workspaces.AsQueryable();
}
Я хотел бы как можно больше использовать существующее приложение mvc, как я могу наилучшим образом использовать существующий уровень обслуживания и модель предметной области или лучше не использовать? Лучше ли разделять услуги?
Кто-нибудь может указать мне на некоторые хорошие учебники для начинающих для этого?
Спасибо Кай
1 ответ
Я предпочитаю иметь общий уровень бизнес-логики в процессе. DTO (объекты передачи данных) используются для связи между уровнями. Когда уровень доступа к данным основан на EF, я предпочитаю использовать объекты POCO как DTO. Теперь для внешних приложений или другого пользовательского интерфейса я создаю разные сервисные уровни - для получения данных будут использоваться одни и те же BL и DTO. Однако я предпочитаю иметь отдельные классы Data Contract для сервисов.
Логика, лежащая в основе разделения, заключается в том, что API уровня BL может быть более разговорчивым (будучи внутрипроцессным), в то время как API службы будет основан на коренастых взаимодействиях без состояния. Вы можете предоставлять ограниченную функциональность и / или различные API через сервисы (потому что в основе лежит впечатление, что сервисы будут использоваться внешними приложениями). Также рекомендуется разделять DTO и DataContract, потому что они могут меняться по-разному и в разное время. Изменения Контракта с данными должны контролироваться и корректироваться, в то время как они могут быть неприменимы к DTO (или объектам домена).
Что касается вашего мобильного интерфейса, он не должен использовать сервисы, а напрямую зависит от уровня BL в процессе. Это возможно, если ваше оригинальное приложение MVC является многоуровневым.
Еще одно наблюдение - возвращать не имеет смысла IQueryable
из службы WCF. Вы можете вернуть массив объектов, а клиентское приложение может привести к IQueryable
если нужно.