Welcome to Comunidad .NET de Cd. Juárez Sign in | Join | Help

Browse by Tags

All Tags » web services

Preguntas de los lectores: DataSets y Web Services

Esta pregunta me llegó por e-mail y la respuesta acabó tan larga que mejor la pongo como una entrada:

De antemano te digo que tu blog es muy interesante y se entienden todas las cosas que has puesto... ahora bien tengo una duda que puede sonar un poco tonta pero aqui va...
En cuanto a los xml de los web services en visual studio un dataset que se envia por un web services es convertido a xml para viajar por el HTTP asi que lo puedo dejar de esa manera para que otra aplicacion lo recoja como un xml????
en el caso de que no... al serializar el objeto DataSet obtengo, eso si en la vista del browser un tag String y dentro de ella todo el codigo del xml, evidentemente eso no es lo que se ocupa o si??
Bueno disculpa por las preguntas pero me interesan demasiado las respuestas.... de antemano muchas gracias!!!

—Luis Mario Carvajal

Primero que nada, gracias Luis.  Se siente muy padre que las personas encuentren algo que escribes útil.

Segundo, las preguntas que haces son bien interesantes.  La respuesta a la primera es, sí, un DataSet se serializaría a XML—al tratarse de servicios Web todos los tipos son serializados a XML, porque en escencia estamos hablando de XML sobre HTTP, como tú lo mencionaste.

Sin embargo, no se recomienda utilizar un DataSet para pasar datos, ya que es un objeto bastante complejo: tiene muchas colecciones (DataTables, DataRelations, etc.), y cada una de ellas, a su vez tiene colecciones (un DataTable tiene una colección de DataRows, etc.).  Así que al serializar el grafo de todos eso objetos, acabas con mucho overhead, mucho XML complejo para transmitir solo unos cuantos datos. Y, aunque en teoría sí podrías consumir eso de otra aplicación—dependiendo si estas usando ASP.NET Web Services o WCF, ya que utilizan serializadores distintos—no es muy interoperable con otras plataformas. 

A pesar de estas recomendaciones, debo mencionar que si el consumidor de tu servicio usa .NET, no debe tener problemas para consumir ese DataSet como un objeto de .NET, ya que el generador de la clase proxy que viene con Visual Studio utiliza unos artilugios para des-serializar el DataSet apropiadamente.

Ahora, que si lo que te interesa solo es extraer los datos del DataSet en formato XML, una manera muy sencilla de hacerlo—y mucho mejor que hacer ToString(), creo—es a través del método WriteXml() que es parte de la clase DataSet y DataTable.  Aunque no te da mucho control sobre el XML Schema que utiliza para exportar esos datos, utiliza una estructura bastante sencilla y amigable como para leerlo y manipularlo con otras herramientas.

Finalmente, creo que también es importante mencionar que si simplemente estás exponiendo datos, existen otros formatos más breves (que no usan XML), pero que siguen siendo amigables a los servicios, como JSON.  WCF maneja JSON de una manera relativamente fácil, y puedes consumirlo utilizando ASP.NET AJAX, por ejemplo.  Una última alternativa también es exponer tus datos como un ADO.NET Data Service (que es una característica nueva del .NET Framework 3.5 SP1).

Espero te ayude.

Enjoy smile_shades