WCF vs ASP .Net Web API

93

¿Cuáles son los pros y los contras de utilizar cada tecnología?

WCF Web Api ahora se fusionó con Asp.net Asp.net web api ahora admite autohospedaje.

Todavía me imagino que si quiero exponer múltiples esquemas de protocolo para la misma operación, todavía me inclinaría hacia WCF o ¿el punto final Mvc puede hacer esto también?

¿También la nueva API web Asp.Net expone Wsdl? De no ser así, ¿cómo averiguaría el cliente qué operación está disponible para ellos?

Podría decirse que la mejor característica de Mvc es el encuadernador de modelos. ¿Qué tan robusto es el equivalente WCF?

Entonces, ¿alguien puede decirme qué ventaja aporta la API web de Asp.net? WCF parece abrumadoramente la opción más poderosa / escalable, en mi opinión. Lo único que tiene Mvc Web Api sobre el modelo WCF es probablemente la facilidad de desarrollo, pero eso significa ponerse en cuclillas si termina siendo una limitación de diseño seria en el futuro.

Alwyn
fuente
15
Encuentro el título de esta pregunta un poco engañoso. El título es "MVC 4 vs Wcf Web Api", pero la pregunta parece tratar más con WCF vs ASP .Net Web API. Por el título, pensé que lo que se estaba comparando era el marco estándar MVC 4 (controladores, modelos, vistas) vs el marco ASP .Net Web API. ¿Alguien más encuentra este título engañoso?
BruceHill

Respuestas:

72

Primero, le sugiero que lea mi publicación sobre el tema: http://blogs.microsoft.co.il/blogs/idof/archive/2012/03/05/wcf-or-asp-net-web-apis-my- dos centavos sobre el tema.aspx

Con respecto a su pregunta sobre WSDL, dado que WebApi no usa SOAP, no requiere un WSDL y no exporta uno. Puede usar Hypermedia para devolver recursos con una lista de posibles URL de actividad (considérelo un recurso autodescriptivo)

IdoFlatow
fuente
6
Esa es una muy buena reseña. El mejor que he visto en mi vida. Pero ahora estoy más confundido que nunca. WebApi agrega mucho, pero la incapacidad de exponer otros puntos finales parece muy restrictiva. Si tuvieras un cliente que pueda usar jabón, ahora se verá obligado a construir la acción y analizar el resultado a mano cuando el jabón podría haber generado todo el contexto para ellos. También los bloqueará de la función de jabón más avanzada, como una sesión confiable y una transacción ácida ... suspiro.
Alwyn
2
@Alwyn: creo que todos los hechos que mencionó son ciertos y, por lo tanto, no deberían confundirlo, sino ayudarlo a tomar una decisión: la API web tiene sus propias ventajas, pero si su servicio debe exponerse desde múltiples puntos finales, incluidos otros protocolos, o si tiene una gran necesidad de la función de generación automática del cliente o las funciones avanzadas de soap; estas podrían ser una consideración por qué preferir WCF sobre Web API
BornToCode
@BornToCode: el código del cliente se puede generar automáticamente con WebAPI. Puede producir un archivo json swagger utilizando el código WebAPI. Ese archivo json puede luego ser utilizado por un generador de código como swagger-codegen para producir código de cliente en una gran cantidad de idiomas de destino.
involuntariamente dejado en blanco
@unintentionallyleftblank - En mi humilde opinión, es aún más "fácil de usar" generar automáticamente el código de cliente a través de WCF que la API web.
BornToCode
15

La elección depende de lo que queramos hacer.

  1. ASP.NET Web API es un marco para crear servicios no basados ​​en SOAP solo a través de HTTP, por lo que no hay más protocolos de transporte disponibles con este marco.
  2. WCF / Windows Communication Foundation es un marco para el intercambio de mensajes basados ​​en SOAP; aquí usamos muchos protocolos de transporte: HTTP, TCP, canalizaciones con nombre, MSMQ, etc.

No estoy seguro de cuál tiene mejor rendimiento con respecto a la cantidad de datos, tal vez WCF ya que podemos usar protocolos bajos. Se agradece cualquier comentario.

Junior Mayhé
fuente
2
No se ofenda, pero HTTP es solo un protocolo de capa de aplicación. No tiene ninguna restricción inherente sobre qué protocolos de la capa de transporte se pueden utilizar.
smwikipedia
8

La API web de WCF se centra principalmente en las implementaciones de REST. Si está configurando una implementación REST, los bits WCF estándar son un poco molestos en la parte trasera. Si está configurando servicios RESTful, encontrará que la API web de WCF es una experiencia mucho mejor. Si está configurando servicios SOAP, la API web de WCF no es su mejor amiga y es mejor que utilice WCF para sus servicios.

Gregory A Beamer
fuente
2
Sí, las configuraciones son una molestia, pero es un costo de configuración único. Una vez que lo haya hecho, puede copiar y pegar el comportamiento / punto final en otro servicio. La mayoría de las veces se obtiene simplemente etiquetando las nuevas operaciones con WebGet. Por otro lado, si alguna vez obtiene un cliente que quiere usar Soap + Wsdl, todo es solo un cambio de configuración en lugar de code + deploy + QA + el resto. Entonces, ¿cómo es Mvc Web Api mejor?
Alwyn
1
Si ya se siente cómodo con WCF, puede continuar por ese camino. Hay, además de lo que mencioné, algunas mejoras internas en REST en la API web de WCF (no tengo la lista frente a mí), pero cualquiera de las dos puede funcionar y no pasaría semanas refactorizando si tiene toneladas de servicios de trabajo, esp. ya que hay un pequeño cambio de paradigma en el pensamiento. Sin embargo, para el trabajo futuro, consideraría la API web de WCF. Pero he estado con WCF Web API durante bastante tiempo, por lo que puedo estar sesgado.
Gregory A Beamer
0

Utilice WCF para sitios de intranet / B2B n Web API para B2C / C2C / sitios de Internet ... SOAP / XML sigue siendo el estándar para la comunicación intraempresarial n ¡¡¡no va a desaparecer !!!

A_Var
fuente