WCF против ASP.NET Web API [закрыто]

484

Я потратил несколько месяцев, пытаясь понять концепции, лежащие в основе WCF, и недавно я разработал свое первое сервисное приложение WCF.

Я изо всех сил пытался понять все настройки в файле конфигурации.
Я не уверен в окружающей среде, но кажется, что с этим можно делать удивительные вещи.

На днях я узнал, что Microsoft выпустила новую вещь под названием ASP.NET Web API .

Из того, что я могу прочитать, это среда RESTful , очень простая в использовании и реализации.

Теперь я пытаюсь выяснить, в чем заключаются основные различия между двумя платформами, и стоит ли мне пытаться преобразовать мое старое приложение-службу WCF с новым API.

Может ли кто-нибудь помочь мне понять различия и использование каждого из них?

LeftyX
источник
12
+1 интересный вопрос. может быть, вы получите хорошие ответы на programmers.stackexchange.com
Mithir
1
Какие функции "старого" WCF вы используете? Вы пытаетесь создать RESTful API? Или RPC, или SOAP?
Marcind
1
@marcind: спасибо за ваш ответ. В основном это RESTful звонки. Нет RPC вообще.
LeftyX
4
Еще один хороший ответ можно найти на stackoverflow.com/a/9859981/456814
1
оба - это одно и то же, но старая разница, с которой можно столкнуться, заключается в том, что wcf в основном предназначен для интранета и Webapi для интернета, да, безусловно, мы также можем сделать wcf спокойным! в основном оба работали по протоколу http web.http
LostCoder

Ответы:

185

Новый ASP.NET Web API является продолжением предыдущего проекта WCF Web API (хотя некоторые концепции изменились ).

WCF изначально был создан для включения служб на основе SOAP. Для простых сервисов RESTful или RPCish (например, таких клиентов, как jQuery) ASP.NET Web API должен быть хорошим выбором.

marcind
источник
36
Кроме того: хотя WCF обеспечивает некоторую поддержку написания служб в стиле REST, поддержка REST в ASP.NET Web API является более полной, и все будущие улучшения функции REST будут сделаны в ASP.NET Web API msdn.microsoft.com/en- us / library / jj823172.aspx
Охад Шнайдер
6
На самом деле WCF изначально был создан для реализации уровня абстракции между службой SOAP или RPC и клиентом. Задача состояла в том, чтобы создать единую архитектуру (ABC) вокруг этих очень разных вызовов и обрабатывать подключение через файлы конфигурации.
Скотт Маркус
4
Настоящим недостатком ASP.NET Web API является его клиентская оснастка. Visual Studio поддерживает интегрированные инструменты для поддержки бесшовных объектов клиента службы WCF и создания службы. Нет поддержки в веб-API. Я знаю, что есть HttpClientчто-то удивительное, но оно не заботится о генерации сущностей и сериализации / десериализации.
Шимми Вейцхандлер
1
@Shimmy Как насчет генерации сервиса с использованием чванства?
Alex78191
1
@ Alex78191 спасибо за ваш ответ. Могут ли сгенерированные объекты излучать INotifyPropertyChangedклиентские объекты? Как насчет проверки?
Шимми Вейцхандлер
250

Для нас WCF используется для SOAP, а веб-API для REST. Я хотел бы, чтобы веб-API поддерживал SOAP. Мы не используем расширенные функции WCF. Вот сравнение с MSDN :

введите описание изображения здесь

Маниш Джайн
источник
1
А веб-API поддерживает OData, которая для CSOM является находкой.
abbaf33f
12
Удивительно, как MS с таким большим количеством слов не говорит ничего действительно достойного. Например, WCF поддерживает JSON, но эта информация хорошо скрыта в этом «сравнении», хотя в тексте говорится, что WebApi поддерживает JSON не один, а два раза.
Магалланес
1
эта таблица не имеет смысла. «JQuery» (пугающие кавычки для заглавной буквы J) - это протокол и / или формат?
17
1
Интересно. В MSDN неверно упоминать HTTP как транспортный протокол. HTTP - это протокол прикладного уровня.
RayLoveless
80

ASP.net Web API - это все о GET, POST, PUT, DELETE на основе HTTP и REST, с хорошо известным стилем программирования ASP.net MVC и возвращаемым JSON; Веб-API для всех легких процессов и компонентов на основе чистого HTTP. Для того, чтобы продолжить WCF даже для простого или самого простого единственного веб-сервиса, это принесет весь дополнительный багаж. Для облегченного простого обслуживания для ajax или динамических вызовов всегда WebApi просто решает проблему. Это аккуратно дополняет или помогает параллельно с ASP.net MVC.

Проверьте подкаст: Hanselminutes Podcast 264 - Это не WCF вашего отца - Все о WebAPI с Glenn Block от Скотта Хансельмана для получения дополнительной информации.

Навин Виджай
источник
67

В сценариях, перечисленных ниже, вы должны пойти на WCF:

  1. Если вам нужно отправить данные по таким протоколам, как TCP, MSMQ или MIME
  2. Если клиент-клиент просто знает, как использовать сообщения SOAP

WEB API - это фреймворк для разработки сервисов RESTful / HTTP.

Есть так много клиентов, которые не понимают SOAP, таких как браузеры, HTML5, в таких случаях веб-API - хороший выбор.

Заголовок сервисов HTTP определяет, как защищать сервис, как кэшировать информацию, тип тела сообщения и тело HTTP могут указывать любой тип контента, например HTML, а не только XML как сервисы SOAP.

Kris
источник
7
Это делает предположение, что WCF обрабатывает только сообщения SOAP, неверное предположение. Вы также можете выставить конечные точки REST на сервисах WCF. Я бы изменил его, сказав, что если вы не собираетесь использовать функции WCF (см. Сообщение Триди), то Web API имеет смысл.
Майк
3
Да, WCF также делает Rest. В основном, Web API - это подмножество функций WCF, которые подходят, если вы делаете простые приложения для обработки данных в стиле CRUD.
user1496062
41

Со времени использования обоих до сих пор я обнаружил много различий между WCF и Web API. Оба технологических стека хорошо подходят для разных сценариев, поэтому невозможно сказать, что лучше, это зависит от конфигурации и сценария.

Properties              ASP.Net Web API                         WCF
--------------------------------------------------------------------------------------------------
End point (mainly)      Http based                              SOAP based
Service Type            Front End                               Back-end
Support                 caching, compression, versioning        No
Framework               ASP.net                                 WCF
Orientation             Resource Oriented                       Service Oriented
Transports              http                                    http, tcp, MSMQ, Named pipe
Message pattern         Request reply                           request Reply, one way, duplex
Configuration overhead  Less                                    Much
Security                lesser than WCF (web standard security) Very high (WS-I standard)
Hosting                 IIS                                     IIS, Windows Service, Self hosting
Performance             Fast                                    A bit slower than Web API
In use from             .NET 4.0                                .NET 3.5

Примечание: данные не только на мой взгляд, но и собраны с других официальных сайтов.

раджпут
источник
12
API веб-службы также можно размещать самостоятельно (Owin / Katana), а также в службе Windows
Monis Iqbal
минус 1 для построения таблицы с использованием изображения вместо HTML, потому что это мешает редактированию ответа для улучшения.
Ахсан Ахмед
34

WCF даст вам так много из коробки, это даже не сравнимо ни с чем. Если вы не хотите самостоятельно выполнять (если назвать несколько) аутентификацию, авторизацию, шифрование, организацию очередей, регулирование, надежный обмен сообщениями, ведение журнала, сеансы и так далее. WCF - это не только веб-сервисы; WCF - это платформа для разработки SOA.

tridy
источник
11
Если я не ошибаюсь, я думаю, что WEB API также предоставляет большинство функций, которые вы перечислили.
Алекс
4
Ни один веб-API не предоставляет эти вещи или предоставляет очень простые версии.
user1496062
3
Хорошо, что это - это обеспечивает их или нет?
5
Для аутентификации и авторизации проверьте asp.net/web-api/overview/security/… . tl; dr: Это определенно поддерживается в IIS. Для шифрования вам, вероятно, потребуется использовать SSL, ASP.NET естественным образом обрабатывает очереди (но это прямо на основе рабочих потоков, доступных против входящих запросов). Сессии существуют (но я бы никогда не рекомендовал использовать Сессии напрямую). Регистрация достаточно проста в настройке (через ActionFilters или тому подобное). Альтернативой надежному обмену сообщениями является использование SignalR (хотя и не совсем).
Джеймс Хауг
7
«Не сравнимо ни с чем» ?? Вряд ли.
bbsimonbb
16

Почему я отвечаю:

Я потратил огромное количество времени, чтобы понять разницу между этими двумя технологиями. Я изложу здесь все те моменты, которые, как мне кажется, «если бы у меня были эти моменты в то время, когда я размышлял в поисках этого ответа, я решил бы очень рано в выборе необходимой технологии».

Источник информации:

Microsoft® Visual Studio® 2015 выпущена

ISBN-13: 978-0-672-33736-9 ISBN-10: 0-672-33736-3

Почему ASP.NET Web API и WCF:

Прежде чем сравнивать технологии ASP.NET Web API и WCF, важно понять, что на самом деле существуют два стиля / стандарта для создания веб-служб: REST (передача состояния представления) и SOAP / WSDL. SOAP / WSDL был оригинальным стандартом, на котором были построены веб-сервисы. Однако его было сложно использовать, и у него были громоздкие форматы сообщений (например, XML), которые снижали производительность. REST-сервисы быстро стали альтернативой. Их легче писать, потому что они используют базовые конструкции HTTP (GET, POST, PUT, DELETE) и обычно используют меньшие форматы сообщений (например, JSON). В результате, основанные на REST HTTP-сервисы теперь стали стандартом для написания сервисов, предназначенных исключительно для Интернета.

Давайте определим назначение ASP.NET Web API

ASP.NET Web API - это технология Microsoft для разработки HTTP-веб-сервисов на основе REST. (Он давно заменил Microsoft ASMX, основанный на SOAP / WSDL.) Веб-API позволяет легко создавать надежные сервисы на основе HTTP-протоколов, которые понятны всем браузерам и собственным устройствам. Это позволяет вам создавать службы поддержки вашего приложения и вызывать их из других веб-приложений, планшетов, мобильных телефонов, ПК и игровых консолей. Большинство приложений, написанных сегодня для использования когда-либо существующего веб-соединения, так или иначе используют службы HTTP.

Давайте теперь определим назначение WCF:

Общение через Интернет - не всегда самое эффективное средство. Например, если и клиент, и служба существуют на одной и той же технологии (или даже на одной и той же машине), они часто могут договориться о более эффективных средствах связи (таких как TCP / IP). Разработчики сервисов оказались перед тем же выбором, которого они пытались избежать. Теперь им придется выбирать между созданием эффективных внутренних служб и возможностью широкого доступа через Интернет. И, если они должны были поддерживать оба, им, возможно, придется создать несколько версий своего сервиса или хотя бы отдельные прокси для доступа к своему сервису. Это проблема, которую Microsoft решила с WCF .

С WCF вы можете создать свой сервис, не заботясь о границах. Затем вы можете позволить WCF беспокоиться о том, чтобы ваш сервис работал наиболее эффективно, в зависимости от вызывающего клиента. Для управления этой задачей WCF использует концепцию конечных точек. Ваша служба может иметь несколько конечных точек (настроенных во время разработки или после развертывания). Каждая конечная точка указывает, как служба может поддерживать вызывающего клиента: через Интернет, через удаленное взаимодействие, через Microsoft Message Queuing (MSMQ) и многое другое. WCF позволяет вам сосредоточиться на создании функциональности вашего сервиса. Он беспокоится о том, как наиболее эффективно общаться с звонящими клиентами. Таким образом, одна служба WCF может эффективно поддерживать множество различных типов клиентов.

Пример WCF:

Рассмотрим пример:

Данные о клиентах распределяются между приложениями. Каждое приложение может быть написано на другой платформе, и оно может существовать в другом месте. Вы можете извлечь пользовательский интерфейс в службу WCF, которая обеспечивает общий доступ к общим данным клиента. Это централизует данные, уменьшает дублирование, исключает синхронизацию и упрощает управление. Кроме того, с помощью WCF вы можете настроить конечные точки службы так, чтобы это имело смысл для вызывающего клиента. На рисунке показан предыдущий пример с централизованным доступом к данным клиента в службе WCF.

Вот как WCF обслуживает разных клиентов

Вывод:

я) Когда выбрать веб-API:

Нельзя отрицать, что основанные на REST HTTP-сервисы, подобные тем, которые созданы с использованием ASP.NET Web API, стали стандартом для создания веб-сервисов. Эти сервисы предлагают простой и понятный подход для веб-разработчиков, создающих сервисы. Веб-разработчики понимают HTTP GET и POST и, следовательно, хорошо адаптируются к этим типам сервисов. Поэтому, если вы пишете сервисы, строго ориентированные на HTTP , ASP.NET Web API является логичным выбором.

ii) Когда выбрать WCF:

Технология WCF полезна, когда вам необходимо поддерживать несколько конечных точек служб на основе разных протоколов и форматов сообщений. Такие продукты, как Microsoft BizTalk, используют WCF для создания надежных сервисов, которые можно использовать через Интернет, а также с помощью различных конфигураций между компьютерами. Однако, если вам необходимо написать приложение, которое взаимодействует через TCP / IP при подключении к локальной сети. сеть и работает через HTTP, когда вне сети, WCF ваш ответ .

Имейте в виду:

Веб-разработчики часто считают WCF более сложным и сложным для разработки. Поэтому, если вы не предвидите необходимость в многопротокольных службах, вы, скорее всего, будете придерживаться ASP.NET Web API.

Мухаммед Вакас Дилавар
источник
1
Пожалуйста, не добавляйте один и тот же ответ на несколько вопросов . Ответьте лучшим и отметьте остальных как дубликаты, как только вы заработаете достаточно репутации. Если это не дубликат, адаптируйте сообщение к вопросу и отметьте его как удаленное.
Бхаргав Рао
12

Есть сравнение на MSDN по этому поводу

WCF и ASP.NET Web API

Для меня выбор был о том, кто такие клиенты и где они находятся?

В пределах сети компании и клиентов на основе .NET: используйте WCF с привязкой TCP (быстрая связь, чем HTTP)

Вне сети компании, и используйте различные технологии, такие как PHP, Python и т . Д. Используйте Web API с REST

Аршад Мухаммед
источник
9

С точки зрения бизнеса, в WebApi отсутствует WSDL, поэтому разработчики должны документировать все вручную. И если, например, операция WebApi возвращает список объектов, тогда клиент должен создавать объекты вручную, т.е. WebAPI действительно подвержен ошибкам определений.

Профи Webapi является более легким, чем WCF.

Магеллана
источник
3
WCF == WS- *, webapi == ОТДЫХ
BozoJoe
7

Относительно утверждения «WebApi не хватает WSDL» существует несколько способов генерации Rest client. Одним из популярных подходов является Swagger UI / (Swashbukkle Nuget). Это дает богатый интерфейс для понимания схемы ввода и вывода конечной точки REST и интерактивного инструмента для проверки конечных точек.

JSON LD (Json Linked Documents) - это еще один новый стандарт, который еще больше улучшит опыт разработчиков REST на основе JSON, предоставив схему JSON с лучшей семантикой.

Венкатеш Мунианди
источник
1

С помощью wcf мы можем настроить и предоставить одну и ту же службу поддержки для нескольких конечных точек, таких как tcp, http.if, если вы хотите, чтобы ваша служба работала только на основе http, тогда будет лучше использовать веб-API. Web API имеет гораздо меньше настроек по сравнению с wcf и немного быстрее, чем wcf. Wcf также поддерживает отдых. Если у вас есть ограничение .Net framework 3.5, тогда вы можете выбрать wcf.

Найас Субраманян
источник