В ASP.NET MVC обычно используется код AJAX (например, jQuery) для вызова веб-службы с сервера без обновления страницы. Естественно сделать веб-сервис RESTful. Кажется, есть два пути. Во-первых, URI-адреса ASP.NET MVC являются RESTful, очень легко сделать так, чтобы какой-либо контроллер / действие действовал как метод веб-службы. Во-вторых, WCF может быть RESTful, начиная с версии 3.5.
Итак, каковы плюсы и минусы этих двух способов?
Запросы к ASP.NET MVC будут проходить через конвейер ASP.NET. Это делает его медленнее, чем WCF?





Если вы уже используете ASP.Net MVC для остальной части веб-сайта, я полагаю, имеет смысл использовать ту же структуру и для вызовов AJAX.
Что касается конвейера ASP.Net, я полагаю, вас беспокоит весь жизненный цикл страницы. Жизненный цикл страницы выполняется только в том случае, если вы используете представления с WebFormViewEngine. Платформа предоставляет JsonResult для простой сериализации результатов действий в формате JSON, что полностью обходит жизненный цикл страницы ASP.Net. Подобные классы доступны для XML, RSS и т. д.
Вы должны отличать вызовы AJAX от REST API в том смысле, что вызовы AJAX выполняются в контексте вашего приложения и могут полагаться на контекст приложения для таких вещей, как сеанс, аутентификация и т. д. Однако REST API - это набор API-интерфейсов, которые вы предоставляете миру для использования - поскольку он может полагаться на ваше приложение в таких вещах, как аутентификация, он приносит совершенно новую сложность для защиты вызовов от ваших клиентов и т. д.
Если вам просто нужен JS вашего приложения для взаимодействия с сервером, тогда использование контроллеров MVC - самое простое решение.
Если вы хотите, чтобы эти API-интерфейсы были отделены от кода MVC вашего веб-сайта (для целей развертывания и т. д.) Или если вам нужен REST API, который другие могут использовать для вызова вашего приложения - WCF.
В моем блоге http://shouldersofgiants.co.uk/Blog/ я собрал серию статей об использовании ASP.Net MVC для предоставления веб-службы RESTful, если это поможет.
Дополнительным преимуществом использования стека WCF является возможность раскрыть все интерфейсы, необходимые для CRUD и исследования данных, всего за несколько щелчков мыши с помощью WCF Data Services / ODATA (спецификация, демонстрация), при условии, что ваш уровень данных реализован с использованием Entity Framework.
Я подумываю объединить эти базовые интерфейсы RAD с дополнительным уровнем более сложных транзакционных сервисов, построенных с использованием обычного MVC. Комбинация не кажется слишком элегантной, но с точки зрения производительности она может быть полезной.
WCF также проходит через конвейер ASP.NET.