.net - examples - ¿Debo devolver un conjunto de datos fuertemente tipado de un servicio web?
datagridview bindingsource c# (6)
¿Debo exponer un conjunto de datos fuertemente tipado de un servicio web y vincularlo directamente en un cliente? o hay formas más sensatas para los servicios web de asmx? Estoy haciendo operaciones CRUD (Crear, Leer, Actualizar, Eliminar).
Encuentro que trabajar con conjuntos de datos es frustrante y difícil de trabajar cuando, por ejemplo, cuando inserto en una tabla dentro de él. No parece lógico enviar todo un conjunto de datos cuando solo se inserta un registro o cuando solo se obtiene un registro de una tabla particular dentro del conjunto de datos.
¿Hay una mejor manera?
¿Debería quizás convertirme en objetos y usar objetos en el servicio web? Hacer conversiones por todos lados para hacer que los objetos pasen es quizás tan tedioso?
Depende de sus requisitos de interoperabilidad. Aunque es completamente posible procesar los XML de DataSet desde prácticamente cualquier entorno, puede ser difícil de manejar. Si no estás interoperando, definitivamente recomendaría la ruta del conjunto de datos tipeados porque es increíblemente fácil de usar desde C # y "simplemente funciona".
Estoy de acuerdo con Joannes ... quédese con los objetos y los métodos específicos para los tipos de operaciones que desea exponer.
He tenido un gran éxito con DataSets (el servidor usa y devuelve un conjunto de datos fuertemente tipado, mientras que el cliente lo consume como un conjunto de datos estándar). Al igual que Tomer advierte, no tengo el beneficio de tener problemas de interoperabilidad.
Con respecto a la actualización, enviar todo el conjunto de datos es una mala idea. Hay un método en los objetos DataSet y DataTable llamado GetChanges () que devolverá todas las ediciones desde que se llamó AcceptChanges (). Esto debería ayudarlo a reducir el tráfico de su red.
Tenga en cuenta que el Dataset es específico de .NET. Si desea que su API sea interoperable, debe atenerse a los tipos y construcciones de datos elementales (de lo contrario, es probable que la situación sea engorrosa para los desarrolladores que no sean .NET).
Entonces, los servicios web no están diseñados para pasar grandes objetos en un solo viaje. Si su conjunto de datos contiene más de unos cientos de KB, es probable que termine con los tiempos de espera de HTTP del lado del cliente o del lado del servidor (teniendo en cuenta la configuración predeterminada).
Para las operaciones CRUD, simplemente sugeriría exponer cada operación directamente a través del WS.
algunos enlaces relacionados con este tema
scott hanselman - Devolver DataSets de WebServices es el engendro de Satanás y representa todo lo que es realmente malo en el mundo
rockford lhotka - Pensamientos sobre pasar objetos DataSet a través de servicios web
4guysfromrolla - Más sobre por qué no uso DataSets en mis aplicaciones ASP.NET
Yo diría que optar por los objetos, DataSet puede ser un poco desordenado. Los objetos pueden ser mucho más limpios de mirar, y por supuesto depurar.
Sin embargo, tenga cuidado al trabajar con tipos abstractos, ya que puede ser un poco complicado serializarlos si tiene colecciones basadas en una clase / interfaz abstracta. Tuve problemas con esto en el pasado, sin embargo, encontré una solución .