Что касается написания одного приложения, которое использует как ASP.NET/MVC, так и WCF, это не очень хорошо. WebAPI, возможно, улучшил ситуацию, но в одном проекте, с которым я знаком, он использовал WCF и MVC в одном приложении, в итоге они поддержали два разных набора моделей для представления одних и тех же концепций - один для кода WCF и один для MVC. код. Вы можете представить себе все средства отображения, которые они должны были написать, чтобы перевести вещи между двумя моделями - там было много строк кода, которых можно было бы / нужно было избежать.
Отчасти это произошло потому, что объекты запросов и ответов WCF должны быть аннотированы с помощью [DataContract], а их свойства - с помощью [DataMember], тогда как MVC этого не требует. Идиоматический MVC, с другой стороны, будет нуждаться в ViewModels, которые имеют другие цели, чем WCF DataContracts. Конечно, возможно, что использование двух полных наборов доменных объектов было больше связано с законом Конвея, чем с конфликтом WCF и MVC, но стоит отметить, что WCF и MVC имеют разные цели и требования в отношении вывода и ввода.
Лично я неравнодушен к разработке простого, но мощного сервисно-ориентированного серверного API, особенно когда вам может понадобиться несколько клиентов. Я думаю, что появление превосходных JavaScript MVVM и микро-MVC фреймворков делает это естественным выбором, так как написание кода приложения с использованием BackboneJS , KnockoutJS и других позволяет создать эффективную среду разработки. Затем вы можете использовать серверную часть в микро MVC по вашему выбору для создания веб-приложения или на мобильном клиенте, и ваши партнеры могут также использовать тот же API удаленно.
Предложение
Либо WebAPI, либо Service Stack могут быть хорошими кандидатами для создания вашего внутреннего API. Я рекомендую Service Stack, так как использую его последние несколько месяцев и считаю, что он является отличной заменой WCF. В настоящее время я пишу серию руководств по стеку сервисов в своем блоге .
Стек обслуживания групп поддержки опубликовал пример приложения, использующего инфраструктуру для разработки клона, подобного StackOverflow, который демонстрирует шаблон разработки, который, на мой взгляд, особенно убедителен. Он включает в себя простой, основанный на моделях сервис, который вы можете себе представить, как его используют веб-сайт MVC, мобильное приложение или что-то еще. Цели разработки ServiceStack явно поддерживают шаблон, который должен привести к меньшей связи между клиентом и сервером. Идея состоит в том, чтобы избегать болтливых API с вызовами, как GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)
в пользу меньшего количества методов. Вы можете реализовать то же самое в стеке сервисов следующим образом:
[Route("/customers", "GET"]
[Route("/customers/search/{SearchTerm}", "GET"]
[Route("/customers/region/{Region}", "GET"]
[Route("/customers/region/{Region}/search/{SearchTerm}", "GET"]
public class Customers
{
public int? RegionId { get; set; }
public string SearchTerm { get; set; }
}
public class CustomersService : Service
{
public object Get(Customers request) {
// handle request
return new CustomersResponse();
}
}
Выгода, в моих глазах, является то , что вместо того , чтобы ваш бизнес - логики распространения над большим и большим количеством отдельных методов GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)
, GetCustomersInRegion(int regionId)
, GetCustomersWithSearchTerm(string searchTerm)
, GetCustomers()
, все это в одном месте. Это должно привести к большему количеству поддерживаемого кода.
По совпадению, Stack Exchange нанял первоначального автора Service Stack . Он продолжает активно участвовать в проекте Service Stack.
Я особенно люблю очереди сообщений для определенных вещей - и хотя WCF допускает это, WebAPI нет. ServiceStack позволяет вызывать один и тот же веб-сервис через MQ. Для получения дополнительной информации об этом см. Redis MQ Host по адресу: github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis
@tzerb ответил правильно, IMO, но я хотел бы расширить этот ответ. ASP.NET Web API, который в настоящее время находится на стадии бета-тестирования, и проект OSS - самая близкая среда, которую вы ищете.
Краткое описание продукта следующее (приведено на странице ASP.NET Web API ):
Что касается клиентского приложения, которое вы, возможно, используете для использования своего веб-API, оно, безусловно, не обязательно должно быть приложением ASP.NET. Вы можете использовать свой API со статической HTML-страницей, используя JavaScript. Вы можете легко это сделать с помощью некоторых полезных библиотек JavaScript, таких как jQuery.
С другой стороны, вы можете использовать свой API на сайте сервера в любом приложении ASP.NET. Проект Web API также представил новый клиентский API-интерфейс HTTP .NET под названием HttpClient, который упрощает использование HTTP-сервисов.
В общем, вот хороший набор ресурсов для начала:
Начало работы с ASP.NET Web API - учебные пособия, видео, примеры
Помните, что проект все еще находится в стадии бета-тестирования. Я рекомендую вам следить за блогом Хенрика Ф. Нильсена, где он публикует информацию о последних неизданных обновлениях проекта. Вы можете обратиться к исходному коду проекта и процессу разработки внутри проекта ASP.NET Web Stack .
источник
Я думаю, что в настоящее время предполагается использовать MVC Web API вместо WCF для REST. http://stephenwalther.com/blog/archive/2012/03/05/introduction-to-the-asp-net-web-api.aspx
Модель разработки довольно близка, и вы обходите иногда неприятную конфигурацию WCF.
источник