Чем отличаются веб-сервисы WCF и ASMX?

375

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

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

Shailesh
источник
5
Нет, это вопрос рекомендации. Ни ASMX, ни WCF не являются продуктом. Это две итерации веб-сервисов в стеке Microsoft. Вопрос в том, в чем различия, и стоит ли мне изучать новый? Это не то же самое, что «я должен использовать элементы управления Telerik или Infragistics.»
Джон Сондерс

Ответы:

391

Кит Элдер хорошо сравнивает ASMX с WCF здесь. Проверьте это.

Еще одно сравнение ASMX и WCF можно найти здесь - я не на 100% согласен со всеми пунктами, но это может дать вам представление.

WCF - это, в основном, «ASMX на стереоидах» - это может быть все, что ASMX мог бы - плюс намного больше! ,

ASMX это:

  • легко и просто писать и настраивать
  • доступно только в IIS
  • вызывается только из HTTP

WCF может быть:

  • размещенный в IIS, служба Windows, приложение Winforms, консольное приложение - у вас есть полная свобода
  • используется с HTTP (REST и SOAP), TCP / IP, MSMQ и многими другими протоколами

Вкратце: WCF здесь, чтобы полностью заменить ASMX.

Проверьте Центр разработчиков WCF на MSDN .

Обновление: ссылка кажется мертвой - попробуйте это: Что такое Windows Communication Foundation?

marc_s
источник
15
С Visual Studio 2010 .net 4.0 WCF так же легко написать, как и ASMX, больше нет повода для написания ASMX. WCF намного быстрее, гибче, безопаснее. ASMX является наследием, и никто не должен писать его.
Том Стиккель
13
«Большинство разработчиков ошибочно полагают, что ASMX требует IIS; в конце концов, это единственный вариант использования, который они когда-либо видели. Но правда в том, что ASMX не имеет никаких технических зависимостей от IIS». msdn.microsoft.com/en-us/magazine/cc163879.aspx
MrNick
2
@MrNick: верно. Нет IIS, но все еще только HTTP, и сравните код для размещения ASMX с кодом для размещения службы WCF.
Джон Сондерс
1
К сожалению, ссылка keithelder.net/2008/10/17/wcf-vs-asmx-webservices не работает.
Роберт
2
@codemonkeyliketab: ответ более 6 лет - светлые годы в эпоху Интернета! Я пытался найти замену для Центра разработчиков WCF - см. Мое обновление
marc_s
37

Веб-сервисы ASMX могут вызываться только по HTTP (традиционный веб-сервис с .asmx). В то время как служба WCF или компонент WCF могут быть вызваны любым протоколом (например, http, tcp и т. Д.) И любым типом транспорта.

Во-вторых, веб-сервисы ASMX не являются гибкими. Тем не менее, WCF Services являются гибкими. Если вы делаете новую версию сервиса, вам нужно просто выставить новый конец. Таким образом, услуги являются гибкими, и это очень практичный подход, учитывающий текущие тенденции бизнеса.

Мы разрабатываем WCF как контракты, интерфейс, операции и контракты данных. Как разработчик, мы больше ориентируемся на сервисы бизнес-логики и не должны беспокоиться о стеке каналов. WCF - это унифицированный API-интерфейс для любых служб, поэтому мы создаем службу и используем информацию о конфигурации для настройки механизма связи, такого как HTTP / TCP / MSMQ и т. Д.

NET Эксперты
источник
11
Может быть, это только я, но параграфы № 2 и № 3 выделяются как маркетинг BS.
Неолиск
@ Net Experts, вы сказали: «Если вы создаете новую версию сервиса, тогда вам просто нужно раскрыть новый конец», что вы пытаетесь сказать?
Mou
@ Моу, он имел в виду разоблачение нового, endpointя думаю. Нравится<endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
AlexMelw
25

Это очень старый вопрос, но я не чувствую, что преимущества ASMX изобразили справедливо. Хотя веб-службы ASMX не очень гибки, они очень просты в использовании и понимании. В то время как WCF более гибок, он также более сложен, чтобы встать и настроить.

Веб-сервисы ASMX готовы встать и добавить их в качестве ссылки на веб-сервис, как только вы добавите файл. (при условии, что ваш проект собирается)

Для простого рабочего процесса разработки create webservice-> run webservice-> add webservice referenceу веб-сервиса ASMX есть очень мало того, что может пойти не так, не так много, что вы можете неправильно настроить, и в этом его сила.

В ответ на те, которые утверждают, что WCF заменяет ASMX, я отвечу, что WCF потребуется добавить модернизированный режим конфигурации KISS, чтобы полностью заменить ASMX.

Пример web.config для веб-службы ASMX:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>
Эндрю Хоффман
источник
Я не думаю, что WCF нужно больше конфигурации для работы, которую можно выполнить с помощью веб-сервисов asmx, и вы также можете добавить ссылку на стороне клиента для службы WCF, WCF намного мощнее, чем asmx, он может делать то, что asmx делает, и это будет так же просто, как asmx
Coder1409
9
@ Coder1409 ну, это, конечно, больше конфигурации, потому что некоторые вещи должны быть настроены. Связывание, обнаружение и т. Д. Не обязательно в asmx. Контракты на обслуживание, контракты на эксплуатацию, контракты на данные, данные участников. Не нужно в asmx. Конечно, именно поэтому wcf лучше и мощнее, но отрицать, что это добавляет сложности, просто нечестно. Дошло до того, чтобы сказать, что минусов нет.
Эндрю Хоффман
7
В первый (второй, третий ...) раз, когда я создал wcf, мне понадобилось много времени, чтобы выяснить, какая конфигурация необходима. "Зачем мне это делать?" я продолжал спрашивать себя. «Зачем беспокоиться о чем-то столь сложном?». ASMX просто работал мгновенно. Поэтому говорить, что это так просто, просто не соответствует действительности. Однажды я полностью пойму и изменит свое мнение - до этого дня GRRRR !!!
Том
1
@tomjm Опять же попробуйте это с современной версией Visual Studio и .NET. Помимо прочего, система конфигурации была изменена на дополнительные настройки по умолчанию. В частности, вам вряд ли нужно делать больше, чем указывать URL-адрес, чтобы получить простой веб-сервис, только http, без каких-либо функций.
Джон Сондерс
1
@ Tomjm Ну, это приятно знать. Честно говоря, раньше было так много настроек, что имело смысл использовать приложение менеджера конфигурации wcf. Это может сделать все! (кроме работы из коробки с некоторыми хорошими настройками по умолчанию) Однако в настоящее время мы думаем проще о веб-сервисах. Wcf по-прежнему отлично подходит для продвинутых сервисов, но ... вероятно, большая часть разработки сервисов - это разработка веб-сервисов, и трудно превзойти webapi2 для разработки веб-сервисов.
Эндрю Хоффман
10

WCF полностью заменяет веб-сервисы ASMX. ASMX - это старый способ создания веб-служб, а WCF - текущий способ создания веб-служб. Все новые разработки веб-сервисов SOAP на клиенте или сервере должны выполняться с использованием WCF.

Джон Сондерс
источник
32
Проблема в том, что, хотя ASMX была упрощенной моделью (то есть не очень гибкой), это была простая модель (то есть простая в использовании и понимании для наиболее распространенных потребностей веб-служб). WCF добавляет много дополнительной сложности. Несмотря на то, что MS хочет заменить ASMX на WCF, ему, похоже, будет немного сопротивляться, пока MS не сделает самые распространенные сценарии столь же простыми, как старый метод Webmethod.
mattmc3
6
WCF совсем не сложен. Создайте простой веб-сервис "hello world" в обоих и посмотрите, сколько кода вы пишете в каждом из них. Ответ: не много в любом, и только немного больше в WCF. И, кстати, ASMX уже была заменена WCF. Сделка сделана
Джон Сондерс
58
"WCF совсем не сложен" Ха. Скажите, что по-моему перегружен web.config.
mattmc3
26
(Не downvoter, но я скажу вам почему) - потому что «это новое, а это старое» не является существенной разницей, что любой должен заботиться. Мы не выбираем инструменты, основываясь исключительно на том, сколько им лет - молоток действительно очень старый, но он все еще лучший инструмент для забивания гвоздей в большинстве случаев. Итак, вы дали верный ответ, просто он не так полезен - как старая шутка «ты в самолете».
Жасмин
5
проголосовал вниз - нет ссылки. Откуда вы знаете эту информацию? Это мнение? Ты работаешь на майкрософт? Добавьте ссылку, и я буду голосовать.
Tomjm
7

Сейчас много говорят о простоте веб-сервисов asmx по сравнению с WCF. Позвольте мне прояснить несколько моментов здесь.

  • Это правда, что начинающие разработчики веб-сервисов легко начнут работать с веб-сервисами asmx. Visual Studio выполняет всю работу за них и с готовностью создает проект Hello World.
  • Но если вы можете выучить WCF (что, конечно, не займет много времени), то вы увидите, что WCF также довольно прост, и вы можете легко идти вперед.
  • Важно помнить, что упомянутые сложности в WCF на самом деле связаны с прекрасными функциями, которые он несет с собой. В файле конфигурации указаны адреса, привязки, контракты и конечные точки, службы и клиенты. Красота вашей бизнес-логики разделена и поддерживается безопасно. Завтра, если вам нужно изменить привязку с basicHttpBinding на netTcpBinding, вы можете легко создать привязку в файле конфигурации и использовать ее. Таким образом, все изменения, относящиеся к клиентам, каналам связи, привязкам и т. Д., Должны быть сделаны в конфигурации, оставляя бизнес-логику безопасной и нетронутой, что имеет действительно хороший смысл.
  • «Веб-сервисы» WCF являются частью гораздо более широкого спектра удаленной связи, предоставляемой через WCF. Вы получите гораздо более высокую степень гибкости и мобильности при работе в WCF, чем при использовании традиционного ASMX, поскольку WCF с самого начала предназначен для суммирования всех различных инфраструктур распределенного программирования, предлагаемых Microsoft. С конечной точкой в ​​WCF можно связываться так же легко через SOAP / XML, как и через TCP / двоичный, и изменить этот носитель - просто мод конфигурационного файла. Теоретически это уменьшает количество нового кода, необходимого при переносе или изменении бизнес-потребностей, целей и т. Д.
  • Доступ к веб-службам возможен только через HTTP, и он работает в среде без состояний, где WCF является гибким, поскольку его службы могут размещаться в различных типах приложений. Вы можете разместить свои службы WCF в Консоли, Службах Windows, IIS & WAS, которые снова являются различными способами создания новых проектов в Visual Studio.
  • ASMX старше WCF, и все, что ASMX может сделать, может WCF (и более). По сути, вы можете видеть, что WCF пытается логически сгруппировать все различные способы взаимодействия двух приложений в мире Microsoft; ASMX был только одним из этих многих способов, и теперь он сгруппирован под зонтичными возможностями WCF.
  • Вам всегда будет нравиться использовать Visual Studio для NET 4.0 или 4.5, поскольку это облегчает жизнь при создании служб WCF.
  • Основное отличие заключается в том, что веб-сервисы используют XmlSerializer. Но WCF использует DataContractSerializer, который лучше по производительности по сравнению с XmlSerializer. Вот почему WCF работает намного лучше, чем другие аналоги коммуникационных технологий из .NET, такие как asmx, .NET remoting и т. Д.

Не стоит забывать, что я был одним из тех парней, которым нравились сервисы asmx больше, чем WCF, но в то время я не очень хорошо знал сервисы WCF и их возможности. Я был напуган конфигурациями WCF. Но я осмелился и попытался написать несколько собственных сервисов WCF, и когда я узнал больше о WCF, у меня нет никаких запретов на WCF, и я рекомендую их всем и каждому. Удачного кодирования !!!

Сагник Маюмдер
источник