¿Cuáles son las diferencias entre los servicios web WCF y ASMX?

375

Estoy totalmente confundido entre los servicios web WCF y ASMX. He utilizado muchos servicios web en mi etapa anterior, y ahora se presenta esta nueva cosa llamada WCF. Todavía puedo crear WCF que funcione como un servicio web. Creo que habrá más cosas en WCF.

¿Cuáles son las diferencias entre WCF y los servicios web? ¿Cuándo se debe usar cada uno?

shailesh
fuente
55
No hay forma de que esta sea una pregunta de recomendación. Ni ASMX ni WCF son productos. Son dos iteraciones de servicios web en la pila de Microsoft. La pregunta es cuáles son las diferencias, ¿y vale la pena aprender la nueva? Esto no es lo mismo que "debería usar controles de Telerik o Infragistics."
John Saunders,

Respuestas:

391

Keith Elder compara muy bien ASMX con WCF aquí. Echale un vistazo.

Aquí se puede encontrar otra comparación de ASMX y WCF : no estoy 100% de acuerdo con todos los puntos allí, pero podría darte una idea.

WCF es básicamente "ASMX en esteroides" - puede ser todo lo que ASMX podría - ¡y mucho más! .

ASMX es:

  • fácil y simple de escribir y configurar
  • solo disponible en IIS
  • solo invocable desde HTTP

WCF puede ser:

  • alojado en IIS, un servicio de Windows, una aplicación Winforms, una aplicación de consola: tiene total libertad
  • usado con HTTP (REST y SOAP), TCP / IP, MSMQ y muchos más protocolos

En resumen: WCF está aquí para reemplazar ASMX por completo.

Consulte el Centro de desarrolladores de WCF en MSDN .

Actualización: el enlace parece estar muerto. Pruebe esto: ¿Qué es Windows Communication Foundation?

marc_s
fuente
15
Con Visual Studio 2010 .net 4.0 WCF es tan fácil de escribir como ASMX, ya no hay excusa para escribir ASMX. WCF es mucho más rápido, más flexible, más seguro. ASMX es heredado y nadie debería escribirlo.
Tom Stickel
13
"La mayoría de los desarrolladores asumen incorrectamente que ASMX requiere IIS; después de todo, es el único caso de uso que han visto. Pero la verdad es que ASMX no tiene ninguna dependencia técnica de IIS". msdn.microsoft.com/en-us/magazine/cc163879.aspx
MrNick
2
@ MrNick: a la derecha. Sin IIS, pero solo HTTP, e ir a comparar el código para alojar ASMX con el código para alojar un servicio WCF.
John Saunders
1
Lamentablemente, el enlace keithelder.net/2008/10/17/wcf-vs-asmx-webservices está roto.
Robert
2
@codemonkeyliketab: la respuesta tiene más de 6 años: ¡años luz en la era de Internet! Traté de encontrar un reemplazo para el Centro de desarrolladores de WCF - vea mi actualización
marc_s
37

Los servicios web ASMX solo pueden ser invocados por HTTP (servicio web tradicional con .asmx). Mientras que el servicio WCF o un componente WCF puede ser invocado por cualquier protocolo (como http, tcp, etc.) y cualquier tipo de transporte.

En segundo lugar, los servicios web de ASMX no son flexibles. Sin embargo, los servicios WCF son flexibles. Si crea una nueva versión del servicio, solo necesita exponer un nuevo final. Por lo tanto, los servicios son ágiles y es un enfoque muy práctico que mira las tendencias comerciales actuales.

Desarrollamos WCF como contratos, interfaz, operaciones y contratos de datos. Como desarrollador, estamos más centrados en los servicios de lógica de negocios y no debemos preocuparnos por la pila de canales. WCF es una API de programación unificada para cualquier tipo de servicios, por lo que creamos el servicio y utilizamos la información de configuración para configurar el mecanismo de comunicación como HTTP / TCP / MSMQ, etc.

NET Experts
fuente
11
Tal vez solo soy yo, pero los párrafos 2 y 3 se destacan como marketing BS.
Neolisk
@Net Experts u dijo "Si crea una nueva versión del servicio, entonces necesita exponer un nuevo final" ¿qué está tratando de decir?
Mou
@Mou, quiso decir exponer una nueva endpoint, supongo. Me gusta<endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
AlexMelw
25

Esta es una pregunta muy antigua, pero no creo que los beneficios de ASMX se hayan retratado bastante. Si bien no son terriblemente flexibles, los servicios web de ASMX son muy simples de usar y comprender. Si bien WCF es más flexible, también es más complejo ponerse de pie y configurarlo.

Los servicios web de ASMX están listos para ponerse de pie y agregarse como referencia de servicio web tan pronto como agregue el archivo. (asumiendo que su proyecto se construye)

Para el flujo de trabajo de desarrollo simple de create webservice-> run webservice-> add webservice reference, un servicio web ASMX tiene muy poco que pueda salir mal, no mucho que pueda configurar mal, y esa es su fortaleza.

En respuesta a aquellos que afirman que WCF reemplaza a ASMX, respondería que WCF necesitaría agregar un modo de configuración KISS optimizado para reemplazar completamente ASMX.

Ejemplo web.config para un servicio web ASMX:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>
Andrew Hoffman
fuente
No creo que WCF necesite más configuración para el trabajo que se puede hacer usando los servicios web asmx, y también puede agregar una referencia en su lado del cliente para el servicio WCF, WCF es mucho más poderoso que asmx, puede hacer lo que asmx hace y será tan simple como asmx
Coder1409
99
@ Coder1409 bueno, ciertamente es más configuración, porque algunas cosas necesitan ser configuradas. Encuadernación, capacidad de descubrimiento, etc. No es necesario en asmx. Contratos de servicio, contratos de operación, contratos de datos, miembros de datos. No es necesario en asmx. Por supuesto, estas cosas son la razón por la cual wcf es superior y más poderoso, pero negar que agrega complejidad simplemente no es ser honesto. Está llegando a decir que no hay inconvenientes.
Andrew Hoffman
77
La primera (segunda, tercera ...) vez que creé un wcf me llevó años descubrir la configuración requerida. "¿Por qué necesito hacer eso?" Me preguntaba a mí mismo. "¿Por qué molestarse con algo tan complejo?". asmx simplemente funcionó al instante. Entonces decir que es tan simple no es cierto. Algún día entenderé completamente y cambiaré mi punto de vista, ¡hasta ese día GRRRR!
tomjm
1
@tomjm Nuevamente, pruébelo con una versión moderna de Visual Studio y .NET. Entre otras cosas, el sistema de configuración ha cambiado a más configuraciones predeterminadas. En particular, apenas necesitará hacer más que especificar la URL para obtener un servicio web simple, solo http, sin características.
John Saunders, el
1
@tomjm Bueno, eso es bueno saberlo. Honestamente, solía ser tanta configuración que tenía sentido usar una aplicación de administrador de configuración wcf. ¡Podría hacer todo! (excepto el trabajo fuera de la caja con algunas buenas configuraciones predeterminadas) Sin embargo, hoy en día pensamos más simplemente sobre los servicios WEB. Wcf sigue siendo excelente para el servicio avanzado, pero ... probablemente la mayoría del desarrollo de servicios es desarrollo de servicios web, y es difícil superar a webapi2 para el desarrollo de servicios web imo.
Andrew Hoffman el
10

WCF reemplaza completamente los servicios web ASMX. ASMX es la forma antigua de hacer servicios web y WCF es la forma actual de hacer servicios web. Todo el nuevo desarrollo del servicio web SOAP, en el cliente o en el servidor, debe hacerse con WCF.

John Saunders
fuente
32
El problema es que, si bien ASMX era un modelo simplista (lo que significa que no era extremadamente flexible), era un modelo simple (lo que significa fácil de usar y comprender para las necesidades de servicio web más comunes). WCF agrega mucha complejidad extra. Si bien MS quiere reemplazar ASMX con WCF, parece haber un poco de resistencia hasta que MS haga que los escenarios más comunes sean tan simples como en la forma anterior [Webmethod].
mattmc3
66
WCF no es en absoluto complejo. Cree un servicio web simple "hello world" en ambos y vea cuánto código escribe en cada uno. La respuesta: no mucho en ninguno, y solo un poco más en WCF. Y, por cierto, ASMX ya ha sido reemplazado por WCF. Trato hecho.
John Saunders
58
"WCF no es en absoluto complejo" Ha. Dilo a mi manera sobrebloqueado web.config.
mattmc3
26
(No es un votante negativo, pero le diré por qué), porque "esto es nuevo y eso es viejo" no es una diferencia significativa que a nadie le importe. No elegimos herramientas basadas únicamente en la antigüedad: el martillo es muy viejo, pero sigue siendo la mejor herramienta para clavar clavos la mayor parte del tiempo. Entonces, dio una respuesta válida, simplemente no es tan útil, como el viejo chiste "estás en un avión".
Jasmine
55
rechazado votado - sin referencia. ¿Cómo sabes esta información? ¿Es opinión? ¿Trabajas para microsoft? Agregue una referencia y votaré.
tomjm
7

Hay muchas conversaciones sobre la simplicidad de los servicios web asmx sobre WCF. Permítanme aclarar algunos puntos aquí.

  • Es cierto que los desarrolladores de servicios web novatos se iniciarán fácilmente en los servicios web asmx. Visual Studio hace todo el trabajo por ellos y crea fácilmente un proyecto Hello World.
  • Pero si puede aprender WCF (que por supuesto no tomará mucho tiempo), puede ver que WCF también es bastante simple, y puede seguir adelante fácilmente.
  • Es importante recordar que estas complejidades mencionadas en WCF en realidad se atribuyen a las hermosas características que trae consigo. Hay direccionamiento, enlaces, contratos y puntos finales, servicios y clientes, todos mencionados en el archivo de configuración. La belleza es que su lógica de negocio está segregada y mantenida de forma segura. Mañana, si necesita cambiar el enlace de basicHttpBinding a netTcpBinding , puede crear fácilmente un enlace en el archivo de configuración y usarlo. Por lo tanto, todos los cambios relacionados con los clientes, los canales de comunicación, los enlaces, etc., deben realizarse en la configuración, dejando la lógica empresarial segura e intacta, lo que tiene mucho sentido.
  • Los "servicios web" de WCF son parte de un espectro mucho más amplio de comunicación remota habilitada a través de WCF. Obtendrá un grado mucho más alto de flexibilidad y portabilidad haciendo cosas en WCF que a través de ASMX tradicional porque WCF está diseñado, desde cero, para resumir todas las diferentes infraestructuras de programación distribuida que ofrece Microsoft. Un punto final en WCF se puede comunicar con la misma facilidad a través de SOAP / XML que a través de TCP / binario y cambiar este medio es simplemente un mod de archivo de configuración. En teoría, esto reduce la cantidad de código nuevo necesario al portar o cambiar las necesidades comerciales, objetivos, etc.
  • Se puede acceder a los servicios web solo a través de HTTP y funciona en un entorno sin estado, donde WCF es flexible porque sus servicios se pueden alojar en diferentes tipos de aplicaciones. Puede alojar sus servicios WCF en Consola, Servicios de Windows, IIS y WAS, que de nuevo son formas diferentes de crear nuevos proyectos en Visual Studio.
  • ASMX es más antiguo que WCF, y cualquier cosa que ASMX pueda hacer puede WCF (y más). Básicamente, puede ver a WCF como un intento de agrupar lógicamente todas las diferentes formas de lograr que dos aplicaciones se comuniquen en el mundo de Microsoft; ASMX era solo una de estas muchas formas y ahora está agrupada bajo el paraguas de capacidades WCF.
  • Siempre le gustará usar Visual Studio para NET 4.0 o 4.5, ya que facilita la vida al crear servicios WCF.
  • La principal diferencia es que los servicios web usan XmlSerializer. Pero WCF utiliza DataContractSerializer, que es mejor en rendimiento en comparación con XmlSerializer. Es por eso que WCF funciona mucho mejor que otras contrapartes de tecnología de comunicación de .NET como asmx, .NET remoting, etc.

Sin olvidar que era uno de esos tipos a los que les gustaban más los servicios asmx que WCF, pero esa vez no conocía bien los servicios WCF y sus capacidades. Tenía miedo de las configuraciones de WCF. Pero me atreví e intenté escribir algunos servicios WCF propios, y cuando aprendí más sobre WCF, ahora no tengo inhibiciones sobre WCF y los recomiendo a todos. Feliz codificación !!!

Sagnik Majumder
fuente