
Прежде всего нужно понимать, что WCF сервисы предоставляют все те же возможности что и .NET веб сервисы и значительно расширяют их.
Простая и базовая разница заключается в том, что ASMX веб сервис предназначен для отправки и получения сообщений используя SOAP только через HTTP. В то же время WCF сервис может обмениваться сообщениями используя любой формат (SOAP является стандартным) через любой транспортный протокол (HTTP, TCP/IP, MSMQ, Named Pipes и т.д.).
ASMX простой, но во многих отношениях ограничен по сравнению с WCF.
- ASMX веб сервисы могут быть размещены только в IIS, в то время как WCF сервис имеет следующие варианты хостинга:
- IIS
- WAS (Windows Process Activation Services)
- Console Application
- Windows NT Services
- WCF provided Host
- ASMX веб сервисы ограничены в поддержке одного лишь HTTP, в то время как WCF поддерживает HTTP, TCP, MSMQ, Named Pipes.
- Безопасность ASMX ограничена. Обычно аутентификация и авторизация производится используя конфигурацию безопасности IIS и ASP.NET и безопасность транспортного слоя. Для слоя сообщений может быть использовано WSE. WCF предоставляет согласованную программную модель безопасности для любого протокола и поддерживает много таких же возможностей как IIS и WS-* протоколы безопасности. Дополнительно, WCF предоставляет поддержку claims-based авторизации которая позволяет контролировать ресурсы более четко чем безопасность на основе ролей (role-based security). WCF безопасность остается согласованной не зависимо от того какой хост был использован для реализации WCF сервиса.
- Еще одним важным отличием является то, что ASMX веб сервисы используют для сериализации класс XmlSerializer, в то время как WCF использует DataContractSerializer, который намного лучше по производительности чем XmlSerializer. Ключевыми недостатками XmlSerializer при сериализации .NET типов в XML являются:
- Только публичные поля или свойства .NET типов могут быть переведены в XML
- Только классы, которые реализовывают интерфейс IEnumerable могут быть переведены.
- Классы, которые реализовывают IDictionary, такие как Hashtable, не могут быть сериализованы.
Источник: тут.