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, но преимущества АБСОЛЮТНО превосходят эту кривую обучения.