2008-09-22 12 views
7

¿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).¿Debo devolver un conjunto de datos fuertemente tipado de un servicio web?

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 manera mejor?

¿Debo 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?

Respuesta

4

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".

2

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 objetos grandes 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 operaciones CRUD, simplemente sugiero exponer cada operación directamente a través de WS.

0

Estoy de acuerdo con Joannes ... quédese con los objetos y los métodos específicos para los tipos de operaciones que desea exponer.

+0

Si acaba de publicar que estar de acuerdo, ¿por qué no solo upmod en su lugar? –

+0

Buena pregunta, el cerebro no funcionaba. Disculpas y vota por Joannes: hecho y hecho. –

3

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.

Tenga cuidado al trabajar con tipos abstractos, sin embargo, ya que puede ser un poco complicado serializar si tiene colecciones basadas en una clase/interfaz abstracta. Tuve problemas con esto en el pasado, sin embargo, I found a solution.

2

He tenido un gran éxito con los 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 la ventaja 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.

Cuestiones relacionadas