2010-06-16 15 views
5

Pasé mucho tiempo aprendiendo cómo personalizar WCF desde el punto de vista de agregar autenticación, etc., sobre un servicio RESTful; Creé algunos servidores de servicio personalizados, luego agregué la capacidad de usar un contenedor IOC para crear realmente la instancia de servicio, etc.MVC2 o WCF para una API REST XML/JSON?

Tenemos aplicaciones para iPhone/iPad más algunas otras cosas de tipo gadget (término técnico!) Que ahora usamos estos (XML en la plataforma i, JSON para navegador) y estoy muy satisfecho con el rendimiento y la facilidad con la que podemos agregar nuevas operaciones, etc.

Aprendí todas las debilidades de los serializadores DataContract (y ahora úselos en casos aislados para leer/escribir objetos fuera de WCF) y después de esa curva de aprendizaje empinada, pero ahora que los tenemos estoy muy contento con todos ellos.

Ahora tenemos una serie de nuevos proyectos web para los cuales aproveché la oportunidad de usar MVC, y he quedado impresionado con eso; la unión modelo, en particular, realmente patea el culo.

Ahora estoy buscando APIS RESTful similares para estos proyectos web (todos serán sitios similares pero con marcas diferentes y cambios menores en la lógica de negocios dependiendo de la necesidad personalizada). Originalmente, esperaba que todo este trabajo en WCF nos fuera útil, pero MVC tiene su propia ruta de desarrollo para RESTful XML/JSON y ahora estoy atrapado entre los dos.

Si está escribiendo un sitio MVC, ¿alguna vez usaría WCF para implementar su API REST?

Lanzaré un argumento para usar WCF, que, escrito correctamente, puede aislarse para ejecutarse como un servicio de Windows sin necesidad de un servidor web. Sin embargo, ¡eso parece un caso desesperado!

actualización

debo decir que ahora he implementado 3 servicios REST grandes separadas usando MVC 2 & 3, y es un placer trabajar con ella. He escrito carpetas de modelo para envolver el DataContractSerializer de WCF para XML y, por supuesto, el soporte de JSON está bien. No volveré ahora.

Respuesta

5

Nunca he usado WCF, pero actualmente estoy usando MVC2 para implementar una API REST.

En general, es muy adecuado, pero hay algunas lagunas, y se trata de una curva de aprendizaje. He necesitado usar MVCContrib para una mejor compatibilidad con XML. He utilizado MVC futuros para admitir el envío de un objeto JSON a un método de acción (ver: http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx). También necesitaba tomar la fuente para esto y modificarla para que pudiera soportar XML.

He oído que hay algunos marcos REST que se sientan encima de .NET MVC, pero no he tenido la oportunidad de probarlos.

Si está familiarizado con WCF y funcionó bien la última vez, entonces estaría tentado de seguir con lo que sabe.

+1

Sí, son las lagunas en el soporte de MVC lo que me molesta un poco; No encontré ninguna brecha como tal en WCF, solo un comportamiento extraño. ¡Pero poder integrar la API con el mismo modelo de estado y objeto que la porción MVC del sitio sería una verdadera ventaja! Gracias por los enlaces. –

+0

Respuesta debido a los enlaces. Y creo que tú y Darrel están sugiriendo MVC si puedo, y así lo haré. ¡Gracias a ambos! –

3

He usado WCF para hacer REST desde hace bastante tiempo y mi recomendación sería usar MVC. Si solo quiere tratar con XML y Json, y si su espacio de URI es relativamente simple, entonces probablemente podría hacerlo con WCF. Sin embargo, una vez que salga de las cosas básicas, debe estar muy familiarizado con WCF para evitar su comportamiento predeterminado.

+0

Sin duda estoy de acuerdo en que se necesita un buen conocimiento de WCF para obtener lo mejor de la experiencia REST. Una cosa en particular que no me gusta (pero me encantó hasta que me encontré con MVC) es el enrutamiento estático, con cadenas de plantillas URI como atributos: la tabla de rutas es simplemente una solución mucho mejor. –

+0

@Andras Por lo que yo sé, ambos usan el mismo mecanismo de enrutamiento bajo las cubiertas. La única diferencia es la forma en que llenan la mesa. Con el tiempo, ha habido algunas diferencias en el control de versiones que han causado un comportamiento diferente, pero ambos usan System.Web.Routing. –

+0

sí, lo siento, tienes razón; y en mi opinión, MVC simplemente lo hace bien, pero luego los dos sistemas fueron diseñados para resolver diferentes problemas. Soy un gran admirador de WCF (aunque no al principio), ¡y estoy un poco nervioso por decir adiós a este fin, creo! ¡Qué triste! –