Разница между WCF и ASMX веб сервисами

Иконка WCF

Прежде всего нужно понимать, что WCF сервисы предоставляют все те же возможности что и .NET веб сервисы и значительно расширяют их.

Простая и базовая разница заключается в том, что ASMX веб сервис предназначен для отправки и получения сообщений используя SOAP только через HTTP. В то же время WCF сервис может обмениваться сообщениями используя любой формат (SOAP является стандартным) через любой транспортный протокол (HTTP, TCP/IP, MSMQ, Named Pipes и т.д.).

ASMX простой, но во многих отношениях ограничен по сравнению с WCF.

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

Источник: тут.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>