servicios restful que capa wcf webhttpbinding wcf-web-api

restful - wcf vs web service



WCF Web Api vs WebHttpBinding (4)

Soy nuevo en el desarrollo de servicios de WCF RESTFull y estoy buscando información útil y sus comentarios sobre el uso de webHttpBinding en comparación con la nueva API web de WCF http://wcf.codeplex.com/ .

Lo que busco es conocer las deficiencias de webHttpBinding y, por lo tanto, por qué usar la nueva API web y, especialmente, qué problemas resuelve la nueva API. Si pudiera señalarme algunas publicaciones de blog comparándolos o simplemente hablando sobre los problemas al usar webHttpBinding, lo apreciaría. Gracias de antemano.


La API web es algo así como el posible futuro del desarrollo de REST en WCF. Es solo una vista previa que puede cambiar significativamente antes del lanzamiento final (probablemente en la próxima versión de .NET framework). Por lo tanto, si desea crear un servicio REST de producción, debe utilizar webHttpBinding.

La información disponible sobre Web Api se puede encontrar, por ejemplo, en el blog del equipo de .NET Connected Framework y en el sitio que mencionó. Es la simplificación y extensión de la actual API REST.


La API web proporciona una API basada en HTTP compatible con REST. La API web utiliza los patrones de MVC y será muy familiar para los desarrolladores de ASP.NET MVC. La API web puede aprovechar las capacidades de HTTP como un protocolo de capa de aplicación, devolviendo recursos en múltiples representaciones (XML, JSON, HTML, etc.) de acuerdo con los encabezados de solicitud del cliente.

Por otro lado, WCF webHttpBinding usa los patrones de WCF y atraerá más al desarrollador de WCF: ServiceContracts, OperationContracts, comprensivo (o sobrepeso, dependiendo de cómo se mire, archivo de configuración), capacidad de auto hospedarse fuera de IIS.

Una de las cosas que me gustan de la API web es la capacidad de usar tipos dinámicos para escapar de las restricciones del sistema de tipos. También me gusta el comportamiento de excepción predeterminado en Web API: contraste WCF webHttpBinding donde, de forma predeterminada, las excepciones se combinan como HTTP 500 + una carga de HTML (¡yuk!).

Es bueno tener la opción entre dos tecnologías excelentes aquí. No describiría la API web como "más nueva" o "mejor" que WCF, ya que esto implica que es una tecnología de reemplazo y que WCF webHttpBinding es heredado, lo cual no creo que sea cierto.

Elegí usar WCF webHttpBinding recientemente para exponer una API JSON para un servicio SOAP WCF existente. Creo que fue una buena elección porque se ajustó a ese estilo de esa solución existente y minimizó la cantidad de cambio requerido.


La diferencia más significativa para mí es el cambio en el modelo de programación. Ya no escribe "servicios" que exponen "operaciones" vinculadas a expresiones HTTP (GET, POST, etc.). Con las API web, usted crea "recursos" (POCO) con los que sus clientes pueden interactuar.

Las API web parecen ser mejores en el manejo de varios tipos de medios personalizados (como las imágenes PNG, por ejemplo).

Por último, pero no menos importante, las API web son mucho más adecuadas para las pruebas automatizadas. Por ejemplo, ya no tiene que usar clases de contexto estático para acceder a conceptos HTTP como los códigos de respuesta. Utiliza las clases de solicitud y respuesta de POCO que se pueden instanciar fácilmente en pruebas automatizadas utilizando el operador new () de estilo antiguo.

Estoy de acuerdo con Ladislav en que las API web son solo una vista previa y la creación de una aplicación puede ser arriesgada y prohibida por medio de un acuerdo de licencia (pero no lo he comprobado).

¿Has considerado OpenRasta de @ serialseb? Es estable y ofrece un modelo de programación muy agradable para construir servicios REST.


Las principales deficiencias que diría es que el enlace webhttpbinding dificulta el manejo de las preocupaciones específicas de HTTP. Funciona muy bien si todo lo que está haciendo es pasar un objeto a través de HTTP que se serializa en XML o JSON y que se puede transportar en diferentes formatos.

HTTP es mucho más que un simple protocolo de transporte para XML y JSON, es un protocolo de capa de aplicación con semántica enriquecida. La API web está dirigida específicamente a las personas que desean construir sistemas a través de HTTP que aprovechan al máximo la riqueza de HTTP.

  1. La API web considera que los Recursos HTTP pueden tener una multitud de representaciones basadas en las necesidades de los diferentes clientes. Un extremo del espectro podría ser un navegador simple que solo habla con un servicio que usa una publicación codificada con URL de formulario y un GET, mientras que el otro extremo podría ser un cliente más rico que utiliza Atom / OData o un tipo de medio basado en hipermedia.

  2. La API web acepta que existen otras preocupaciones específicas de HTTP como conneg, etags, etc. que permiten aprovechar mejor los servidores web intermedios.

  3. La API web está diseñada teniendo en cuenta una mejor capacidad de prueba, por lo que puede abordar el trabajo con mensajes HTTP u otras inquietudes de una manera más comprobable.

  4. Web API tiene una historia de configuración más simplificada.

Puede leer más sobre las razones aquí: http://blogs.msdn.com/b/endpoint/archive/2010/11/01/wcf-web-apis-http-your-way.aspx