Каковы различия между веб-службами WCF и ASMX? - PullRequest
368 голосов
/ 15 марта 2010

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

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

Ответы [ 5 ]

385 голосов
/ 15 марта 2010

Кит Элдер прекрасно сравнивает 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?

37 голосов
/ 15 марта 2010

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

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

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

23 голосов
/ 06 апреля 2015

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

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

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

В ответ на те, которые утверждают, что WCF заменяет ASMX, я бы ответил, что WCF потребуется добавить модернизированный K.I.S.S. режим конфигурации для полной замены 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>
11 голосов
/ 15 марта 2010

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

6 голосов
/ 01 февраля 2016

В настоящее время много разговоров о простоте веб-сервисов 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, и я рекомендую их всем и каждому. Удачного кодирования !!!

...