Какая разница между WCF Web API и ASP.NET Web API
В прошлом я немного работал с WCF WebAPI и очень любил множество его функций, я просто играю с ASP.NET Web API на данный момент, и он кажется совершенно другим (IE полностью удален из ФОС).
Кто-нибудь знает, какие функции WCF WebAPI включены в ASP.NET 4 Web API?
Ответы
Ответ 1
Ive сделал немного больше чтения по этому поводу и нашел несколько страниц MS людей по этому поводу:
http://wcf.codeplex.com/wikipage?title=How%20to%20Migrate%20from%20WCF%20Web%20API%20to%20ASP.NET%20Web%20API:
Абстракции веб-API WCF отображаются в веб-API ASP.NET примерно следующим образом
Веб-API WCF → Веб-интерфейс ASP.NET
- Сервис → API веб-интерфейса
- Операция → Действие
- Договор на обслуживание → Неприменимо
- Конечная точка → Неприменимо
- Шаблоны URI → Маршрутизация ASP.NET
- Обработчики сообщений → Тот же
- Formatters → Same
- Обработчики операций → Фильтры, привязки моделей
и http://wcf.codeplex.com/discussions/319671
Интегрированный стек поддерживает следующие функции:
- Современная модель программирования HTTP
- Полная поддержка маршрутизации ASP.NET
- Консолидация контента и пользовательские форматы
- привязка и проверка модели
- Фильтры
- Состав запроса
- Легко unit test
- Улучшенная инверсия управления (IoC) через DependencyResolver
- Конфигурация на основе кода
- Self-хост
Ответ 2
Из того, что я узнал, Microsoft сделала немного путаницу в названии.
Я предполагаю, что вы знаете, что такое WCF, эта большая структура, построенная поверх XML, позволяет пользователю создавать распределенные сервисы с широким спектром технологий (от SOAP до REST до MSMQ и т.д.).
Мне сложно (по крайней мере, для меня) и требует много загрузочного лотка, чтобы он работал, и в конце концов они это поняли и начали предоставлять некоторую стандартную конфигурацию для простых HTTP-сервисов (WCF REST для начинающих)? ASP.NET MVC набирает обороты, и некоторые из функций, которые он предоставил (например, сопоставление автоматических аргументов), начали отображаться в WCF.
Теперь, когда ситуация:
Объявление: WCF Web API теперь является веб-интерфейсом ASP.NET! Веб-API ASP.NET выпущенный с помощью бета-версии ASP.NET MVC 4. Поддержка API WCF и WCF для Содержимое jQuery на этом сайте wll будет удалено к концу 2012 года.
http://wcf.codeplex.com/wikipage?title=Getting%20started:%20Building%20a%20simple%20web%20api
И что лучше imho.
Я уверен, что должно быть возможно разместить asp.net mvc4 webapi поверх WCF (если вам когда-нибудь понадобится), но я не могу найти документацию, которая может доказать мне, что я прав (или неправильно).
UPDATE (не может вписываться в комментарий):
Подождите, существует огромное различие между "переносом подмножества коммуникационных технологий из библиотеки/структуры в другой" и "заменой WCF". Я лично считаю, что WCF был разработан для какой-то концепции коммуникации, и он имеет довольно классный дизайн, но распределенные вычисления несколько переходят к новым (и более простым) решениям (посмотрите многофункциональный SOAP и гибкий REST, хотя многие люди все еще используют REST в RPC-манере), и я думаю, что подобные типы программирования лучше вписываются в архитектуру MVC, чем в WCF. Была предпринята попытка разработать простой способ создания/использования веб-сервисов поверх WCF, но в конечном итоге они выяснили, что это неправильное решение.
Не говоря уже о том, что многие разработчики теперь используют ASP.NET MVC и хотят делать веб-сервисы для своего веб-приложения, возиться с WCF часто слишком сложно для подобных вещей, и я испытал это на своей собственной шкуре.
Я думаю, что механизм маршрутизации является удивительным и правильным способом, и если вы посмотрите внимательно, они включили его часть (с разными именами и типами, но шаблон был там) в WCF. Так что да, я думаю, что если MS не отклонит эту часть WCF WE, она должна это сделать. Чтобы строго ответить, нет, я не думаю, что вы когда-либо найдете WebGet/WebInvoke в asp.net mvc *, он просто не вписывается.
Да, сам хост, вероятно, единственный бит WCF, содержащийся в ASP.NET MVC4 прямо сейчас.
Ответ 3
Похоже, что сам WCF как-то умирает или, по крайней мере, становится гораздо менее важным, чем предполагалось, и из-за этого он также имеет гораздо меньшие усилия по разработке, установленные в свой набор функций. Новые функции WCF более косметичны.
WCF был разработан как независимый от транспорта/протокола способ взаимодействия между процессами. Даже идея была независимой абстракцией, которая в основном строилась поверх стека SOAP. Когда WCF 3.5 предоставил поддержку REST, он был взломан, потому что REST - это все о транспортной зависимости. Использование транспортно-независимого API для поддержки взаимодействия между процессами, которое осуществляется посредством непосредственного использования транспортных функций, оказалось неудобным. В результате MS впервые выпустила WCF Rest API Starter Kit, который никогда не доходил до RTM, но это был предварительный просмотр функций, который позже был включен в WCF 4 и, наконец, в .NET 4.5 или WCF Web API. Поскольку REST зависит от транспорта и в настоящее время используется только с HTTP (даже теоретически можно использовать другой транспортный протокол), API был перенесен в .NET-часть, которая более подходит для обработки HTTP - в настоящее время очень популярна ASP.NET MVC.
Ответ 4
Веб-API WCF заменяется веб-API ASP.NET, который использует функции веб-API WCF и объединяет их с функциями ASPNet MVC. ASP.NET Web API - это новая (02/2012) структура для создания и использования HTTP-сервисов и платформы для создания сервиса RESTful.
Хотя не в оригинальном вопросе, кажется, стоит отметить, что WCF жив и здоров, и его поддержка REST остается полезной, когда у вас есть существующие SOAP (WS- *) сервисы, которые вы должны поддерживать, но хотите добавить REST, чтобы привлечь больше клиентов.
Ссылка
Ответ 5
Следующая выдержка, найденная на этой странице MSDN, хорошо описывает эту проблему.
Использовать WCF для создания надежных и безопасных веб-сервисов, доступных для разных видов транспорта. Используйте ASP.NET Web API для создания служб на основе HTTP, доступных из широкого круга клиентов. Используйте ASP.NET Web API, если вы создаете и разрабатываете новые сервисы типа REST. Хотя WCF предоставляет некоторую поддержку для написания сервисов типа REST, поддержка REST в ASP.NET Web API более полная, и все будущие улучшения REST будут сделаны в ASP.NET Web API. Если вы иметь существующую службу WCF, и вы хотите открыть дополнительные конечные точки REST, использовать WCF и WebHttpBinding.
Ответ 6
Вот хорошая статья о веб-сервисе, WCF и веб-API http://goo.gl/T29A5B
Веб-сервис
- На основе SOAP и возврата данных XML
- Поддержка только протокола HTTP. Он поддерживает только протокол HTTP.
- Потребляется клиентом, который способен понимать xml SOAP Services.
- Может содержать IIS. Он может размещаться только на IIS.
- Легко учиться и понимать.
WCF
- На основе SOAP и возврата данных XML. SOAP - это тяжелое сравнение, а также JSON и его накладные расходы по сети.
- Расширенная версия веб-служб поддерживает несколько протоколов, таких как TCP, HTTP, HTTPS, именованные каналы, MSMQ через конфигурацию.
- Более надежно, когда и клиент, и сервер имеют .Net.
- Его реализация и конфигурация сложны.
- Потребляется клиентом, который способен понимать xml SOAP Services.
- Self-hosting, IIS и использование служб Windows.
Веб-API (Web API 2.0)
- Дизайн специально для создания HTTP Restful Services на .Net Framework.
- Web API легко читается и удобен как JSON.
- Поддержка всех функций HTTP Like URls, Request/Response, Headers, Caching и Versioning.
- Web API поддерживает множество HTTP-глаголов, таких как GET, POST, PUT, DELETE и т.д.
- Веб-API не имеет статуса.
- Web API поддерживает функции MVC (контроллеры, результаты действий, маршрутизацию, фильтр, привязки моделей, контейнер IOC или инъекцию зависимостей)
- Web API может быть размещен на хостинге, размещенном в приложении и в IIS.
- OWIN (Open Web Interface for.NET) используется для самостоятельного хостинга.
Ответ 7
ASP.net web api - легкий и встроенная поддержка REST. Он более подходит для мобильных приложений. WCF раздувается с большим количеством опций. Это зависит от сложности системы, чтобы выбрать один из них.