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

Estoy totalmente confundido entre los servicios web de WCF y ASMX. He utilizado una gran cantidad de servicios web en mi etapa anterior, y ahora hay una novedad 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 debería usarse cada uno?

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

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

WCF es básicamente “ASMX en estereoides” – 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
  • utilizado 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 WCF Developer Center en MSDN .

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

Los servicios web ASMX solo pueden invocarse mediante HTTP (servicio web tradicional con .asmx). Mientras WCF Service o un componente WCF pueden ser invocados 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 de 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 el enfoque es muy práctico al observar las tendencias actuales del negocio.

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

Esta es una pregunta muy antigua, pero no creo que los beneficios de ASMX se hayan retratado de forma justa. Aunque no es terriblemente flexible, los servicios web de ASMX son muy simples de usar y comprender. Mientras que WCF es más flexible, también es más complejo pararse y configurar.

Los servicios web de ASMX están listos para ponerse de pie y agregar como referencia de servicio web en cuanto agrega el archivo. (suponiendo que tu proyecto 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 puede salir mal, no hay mucho que pueda configurar incorrectamente, y esa es su fortaleza.

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

Ejemplo web.config para un servicio web ASMX:

         

WCF reemplaza por completo los servicios web de ASMX. ASMX es la forma antigua de hacer servicios web y WCF es la forma actual de hacer servicios web. Todo el nuevo desarrollo de servicios web SOAP, en el cliente o el servidor, debe hacerse usando WCF.

Se están llevando a cabo muchas conversaciones sobre la simplicidad de los servicios web de asmx a través de WCF. Permítanme aclarar algunos puntos aquí.

  • Es cierto que los desarrolladores de servicios web novatos comenzarán fácilmente en los servicios web de asmx. Visual Studio hace todo el trabajo por ellos y crea fácilmente un proyecto Hello World.
  • Pero si puedes aprender WCF (que por supuesto no tomará mucho tiempo) entonces puedes ver que WCF también es bastante simple, y puedes continuar fácilmente.
  • Es importante recordar que estas complejidades mencionadas en WCF en realidad se atribuyen a las hermosas características que trae consigo. Hay direcciones, enlaces, contratos y puntos finales, servicios y clientes, todos mencionados en el archivo de configuración. La belleza es que su lógica de negocios está segregada y mantenida de manera 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 de negocios 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, ya que WCF está diseñado desde cero para resumir todas las diferentes infraestructuras de progtwigción distribuidas que ofrece Microsoft. Un punto final en WCF se puede comunicar con la misma facilidad a través de SOAP / XML que con TCP / binary y cambiar este medio es simplemente un mod de archivo de configuración. En teoría, esto reduce la cantidad de código nuevo que se necesita para portar o cambiar necesidades comerciales, objectives, 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 son nuevamente formas diferentes de crear nuevos proyectos en Visual Studio.
  • ASMX es anterior a WCF, y cualquier cosa que ASMX pueda hacer puede hacerlo WCF (y más). Básicamente, puede ver que WCF intenta agrupar lógicamente todas las formas diferentes de conseguir que dos aplicaciones se comuniquen en el mundo de Microsoft; ASMX fue solo una de estas muchas formas, por lo que ahora se encuentra agrupada bajo el paraguas de capacidades de WCF.
  • Siempre le gustará usar Visual Studio para NET 4.0 o 4.5, ya que hace la vida más fácil al crear servicios WCF.
  • La principal diferencia es que los servicios web utilizan XmlSerializer. Pero WCF usa 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 fui uno de esos chicos a los que les gustaron más los servicios de Asmx que WCF, pero esa vez no estaba muy consciente de los servicios de WCF y sus capacidades. Tenía miedo de las configuraciones de WCF. Pero me atreví y traté de escribir algunos servicios propios de WCF, y cuando aprendí más de WCF, ahora no tengo inhibiciones sobre WCF y las recomiendo a cualquiera y a todos. ¡Feliz encoding!