Normalmente, diría que WCF para cualquier clase de serice alojado, pero en el caso específico de los servicios RESTful que usan JSON como mecanismo de serialización, prefiero ASP.NET MVC (que me referiré a ASP.NET para el resto de esta respuesta).
Una de las primeras razones se debe al mecanismo de enrutamiento. En WCF, tienes que definirlo en el contrato, lo cual está muy bien, pero si tienes que hacer cambios rápidos en tu enrutamiento, desde mi punto de vista, es mucho más fácil hacerlo usando el mecanismo de enrutamiento en ASP. RED.
Además, hasta el punto anterior, si tiene múltiples servicios expuestos en múltiples interfaces en WCF, es difícil obtener una imagen completa de su estructura de URL (que es importante), mientras que en ASP.NET usted (normalmente) todas las asignaciones de ruta en un solo lugar.
Lo segundo acerca de ASP.NET es que tendrá acceso a todos los objetos intrínsecos por los que ASP.NET es conocido (Solicitud, Respuesta, Servidor, etc., etc.), que es esencial cuando se expone un Punto final específico de HTTP (que es lo que está creando). De acuerdo, puede usar muchas de estas mismas cosas en WCF, pero tiene que decirle específicamente a WCF que lo está haciendo y luego diseñar sus servicios con eso en mente.
Por último, a través de la experiencia personal, he encontrado que la DataContractJsonSerializer
no maneja DateTimeOffset
valores demasiado bien, y es del tipo que se debe utilizar más de DateTime
cuando se trabaja con un servicio (por encima de cualquier criterio de valoración) que puede ser llamado por personas en múltiples zonas horarias. En ASP.NET, hay un serializador diferente que puede usar, o si lo desea, puede crear su propio ActionResult
que utiliza un serializador personalizado para usted. Yo personalmente prefiero el JSON.Net serializer.
Una de las cosas buenas del serializador JSON.Net y ASP.NET que me gusta es que puedes usar tipos anónimos con ella, si eres inteligente. Si crea un método genérico estático en un tipo no genérico que luego delega en un tipo genérico interno, puede usar la inferencia de tipo para utilizar fácilmente los tipos anónimos para sus valores de retorno serializados (suponiendo que son únicos, por supuesto, si tener una estructura que se devuelve constantemente, debe definirla y usarla).
También se debe mencionar que no tiene que descontar completamente WCF si desarrolla un servicio RESTful. Si está presionando un ATOM o fuente de RSS de su servicio, las clases en el espacio de nombres System.ServiceModel.Syndication
de masiva ayudan en la construcción y serialización de esas fuentes.Crear una subclase simple de la clase ActionResult
para tomar una instancia de SyndicationFeed
y luego serializarla en la secuencia de salida cuando se ejecuta ActionResult
es bastante simple.
que dan cuenta de su relación a la pregunta original, pero, ¿podría entrar en más detalles sobre DateTimeOffset y los problemas que ha visto con la serialización de JSON? – Nate
@Nate: recomendaría hacer una pregunta por separado; prueba las diferencias que te ves a ti mismo, y luego publica una pregunta sobre las diferencias donde las ves. – casperOne