В чем разница между WCF Web API и ASP.NET Web API - PullRequest
40 голосов
/ 26 февраля 2012

В прошлом я проделал небольшую работу, используя WCF WebAPI, и мне очень понравились многие его функции. Сейчас я просто играю с ASP.NET Web API, и он кажется совершенно другим (IE полностью удален из WCF).

Кто-нибудь знает, какие функции WCF WebAPI включены в ASP.NET 4 Web API?

Ответы [ 7 ]

22 голосов
/ 26 февраля 2012

Я немного больше читал об этом и нашел несколько страниц от MS, посвященных этому вопросу:

http://wcf.codeplex.com/wikipage?title=How%20to%20Migrate%20from%20WCF%20Web%20API%20to%20ASP.NET%20Web%20API:

Абстракции WCF Web API отображаются в ASP.NET Web API примерно следующим образом

Веб-API WCF -> Веб-API ASP.NET

  • Сервис -> Контроллер веб-API
  • Операция -> Действие
  • Договор на обслуживание -> Не применимо
  • Конечная точка -> Не применимо
  • Шаблоны URI -> Маршрутизация ASP.NET
  • Обработчики сообщений -> То же
  • Форматтеры -> То же самое
  • Операционные обработчики -> Фильтры, связующие модели

и http://wcf.codeplex.com/discussions/319671

Встроенный стек поддерживает следующие функции:

  • Современная модель программирования HTTP
  • Полная поддержка маршрутизации ASP.NET
  • Согласование содержимого и пользовательские средства форматирования
  • Переплет моделей и валидация
  • Фильтры
  • Состав запроса
  • Простота юнит-теста
  • Улучшенная инверсия управления (IoC) с помощью DependencyResolver
  • Кодовая конфигурация
  • Self-хост
14 голосов
/ 26 февраля 2012

Похоже, что сам 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.

14 голосов
/ 26 февраля 2012

Из того, что я узнал, Microsoft немного смутила название.

Я предполагаю, что вы знаете, что такое WCF, эта большая инфраструктура, построенная на основе XML, чтобы позволить пользователю создавать распределенные сервисы с использованием самых разных технологий (от SOAP до REST, MSMQ и т. Д.).

Это чертовски трудно использовать (по крайней мере, для меня), и для его работы требуется много начальной загрузки, и в конце концов они поняли это и начали предоставлять некоторую конфигурацию по умолчанию для простых служб http (кто-нибудь, начинающий набор WCF REST?). ASP.NET MVC набирал обороты, и некоторые функции, которые он предоставлял (например, автоматическое сопоставление аргументов), начали появляться в WCF.

Вот такая ситуация:

Объявление: WCF Web API теперь является ASP.NET Web API! ASP.NET Web API выпущен с ASP.NET MVC 4 Beta. Поддержка WCF Web API и WCF для Содержимое jQuery на этом сайте будет удалено к концу 2012 года.

http://wcf.codeplex.com/wikipage?title=Getting%20started:%20Building%20a%20simple%20web%20api

И это лучше, имхо.

Я вполне уверен, что возможно иметь возможность разместить asp.net mvc4 webapi поверх WCF (если вам это когда-нибудь понадобится), но я не могу найти документацию, которая может доказать, что я прав (или нет).

ОБНОВЛЕНИЕ (не подходит как комментарий): Подождите, существует огромная разница между «перемещением подмножества коммуникационных технологий из библиотеки / фреймворка в другое» и «заменой 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 прямо сейчас.

9 голосов
/ 22 ноября 2012

Веб-API WCF заменяется веб-API ASP.NET, который берет функции из веб-API WCF и объединяет их с функциями из ASPNet MVC.ASP.NET Web API - это новая (02/2012) платформа для построения и использования HTTP-сервисов и платформа для построения сервиса RESTful.

Хотя в первоначальном вопросе и нет, кажется, стоит отметить, что WCF жив и здоров, а его поддержка REST остается полезной, когда у вас есть существующие службы SOAP (WS- *), которые вы должны поддерживать, но хотите добавить REST для достижения большегоклиенты.

Ссылка

  1. CodePlex: веб-API WCF теперь ASP.NET Web API
  2. CodePlex: Даниэль Ротбудущее WCF
  3. Chanel9: Дэн Рот о новом веб-API ASP.NET
1 голос
/ 18 августа 2015

Вот хорошая статья о веб-сервисах, WCF и веб-API http://goo.gl/T29A5B

Веб-сервис

  • На основе SOAP и возвращаемых данных XML
  • Поддержка только протокола HTTP.Поддерживается только протокол HTTP.
  • Используется клиентом, способным понимать службы XML SOAP.
  • Может размещаться на IIS.Он может быть размещен только на IIS.
  • Легко учиться и понимать.

WCF

  • На основе SOAP и возвратаДанные XML.SOAP тяжело сравнить с JSON и его служебными данными по сети.
  • Усовершенствованная версия веб-служб поддерживает несколько протоколов, таких как TCP, HTTP, HTTPS, Именованные каналы, MSMQ через конфигурацию.
  • Более надежно, когдаи клиент, и сервер имеют .Net.
  • Его реализация и конфигурация сложны
  • Используется клиентом, способным понимать службы xml SOAP.
  • Самостоятельный хостинг, IIS и использование служб Windows.

Web API (Web API 2.0)

  • Разработан специально для создания HTTP Restful Services на .Net Framework.
  • Web API легко читается и удобенas JSON.
  • Поддержка всех функций HTTP, таких как URls, запрос / ответ, заголовки, кэширование и управление версиями.
  • Веб-API поддерживает множество HTTP-глаголов, таких как GET, POST, PUT, DELETE и т. д.
  • Веб-API не имеет состояния.
  • Веб-API поддерживает функции MVC (контроллеры, результаты действий, маршрутизацию, фильтр, привязки моделей, контейнер IOC или внедрение зависимостей)
  • Веб-API может бытьСамостоятельное размещение, размещение в приложении и в IIS.
  • OWIN (Open Web Interface для .NET) используется для самостоятельного размещения.
1 голос
/ 20 декабря 2013

Следующая выдержка, найденная на этой странице 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.

0 голосов
/ 10 октября 2013

ASP.net веб-API является легким и встроенной поддержкой REST.Это больше подходит для мобильных приложений. WCF раздут с большим количеством опций.Это зависит от сложности системы, чтобы выбрать один из них.

...