




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