WCF - это коммуникационный стек, который позволяет предоставлять сервисы через HTTP (например, ASMX) и TCP (например, Remoting), а также по именованным каналам (что в действительности является межпроцессным вызовом внутри машины), MSMQ и .NET 3.5 REST.
Это позволяет это, потому что это отделило коммуникационные части сервиса от бизнес-логики. Все, что вам нужно сделать, это украсить ваши классы обслуживания, методы и DTO с помощью соответствующего атрибута контракта ([SeriviceContract], [OperationContract] и [DataContract] соответственно.)
Преимущество этого заключалось в том, что можно было написать сервис один раз и позволить многим различным типам клиентов использовать один и тот же сервис (т. Е. Клиенты Java могут использовать HTTP, клиенты .NET могут использовать TCP, устаревшие могут использовать MSMQ и т. Д.). ).
WCF по-прежнему позволит вам использовать все функции каждого транспорта, включая безопасность, транзакции, надежный обмен сообщениями и т. Д., Но вам необходимо проявлять осторожность. Не все функции работают на всех транспортных средствах, и вам необходимо разработать соответствующий дизайн. WCF позволяет вам указать в вашем контракте, какие функции требуются. Это препятствует тому, чтобы кто-то попытался представить вашу службу способом, который не поддерживает требуемый набор функций (то есть, если ваша служба требует транзакций, среда выполнения WCF не позволит получить доступ к службе через базовую конечную точку HTTP).
WCF также можно расширять с помощью пользовательских поведений (которые влияют на работу среды выполнения WCF) и пользовательских каналов (которые управляют взаимодействием служб WCF с внешним миром.)
WCF имеет некоторую кривую обучения по сравнению с ASMX, но преимущества АБСОЛЮТНО превосходят эту кривую обучения.
Надеюсь, это поможет.