2009-07-27 50 views
5

Por lo que he visto sobre los servicios, los objetos personalizados parecen ser el camino a seguir cuando el servicio se escribe para devolver datos. Si estoy escribiendo un servicio que se utilizará para 1) completar una base de datos, o 2) proporcionar información para un sitio web, ¿hay alguna vez un uso para devolver un conjunto de datos/tabla de datos en lugar de una lista de objetos personalizados con todo eso? ¿información?servicio web/servicio wcf, ¿es mejor devolver un conjunto de datos?

gracias

Respuesta

6

creo que el mayor problema con el envío de conjuntos de datos a través del cable, suponiendo que "propios" los dos extremos, es el "peso" pura un conjunto de datos lleva - con sus capacidades de relación, etc. lo hace mucho más de lo datos de transporte. Una simple colección de objetos debería ser sustancialmente más liviana.

Si no "posee" ambos extremos, o puede tener otros clientes utilizando su servicio, entonces el DataSet es una pesadilla de interoperabilidad.

Si no te importa ninguno de estos problemas, y sientes que una colección de objetos es demasiado "trabajo" (por ejemplo, si solo vas a traducirlo de nuevo a un DataSet en el otro extremo) entonces esa es tu decisión

Hay un buen artículo en él sobre here.

+0

Solo tengo un extremo, y el consumidor del servicio está utilizando .NET 1.1 –

+0

Especialmente en el caso de que no tenga uno de los extremos, está eliminando completamente la capacidad de versión de su contrato. Estás grabando tu servicio en piedra. –

1

Los objetos personalizados lo hacen más fácil para sus clientes. DataSets/DataTables lo hacen más fácil para usted.

Creo que debe basar su decisión en quién quiere que sea más fácil.

0

A pesar de la popularidad de ORM, devuelvo datasets. Devolver objetos personalizados significa mucho trabajo en la funcionalidad de duplicación de piezas ya presente en la clase de conjunto de datos. Los conjuntos de datos hacen un excelente trabajo al representar los datos basados ​​en tablas en la memoria.

4

La única vez que devuelvo DataTable/DataSet sobre WCF es donde tengo algo donde es simplemente imposible saber el esquema de antemano, o simplemente no es ningún beneficio. El 99.99% del tiempo trabajaré con clases regulares de DTO, ya que eso ofrece una buena combinación de rendimiento, simplicidad (para depurar) e interoperabilidad.

He estado trabajando con WCF desde la CTP 3.0 ... He usado DataTable a través de WCF solo un par de veces ... Me sentí un poco sucio al respecto, pero para los casos en cuestión simplemente no había retorno de la inversión al hacerlo de la manera difícil.

Solo tenga en cuenta que será muy difícil para un cliente que no sea .NET para consumirlos.

2

Preguntas como esas son difíciles de entender pero, en general, no desea devolver un conjunto de datos de un servicio web. Insead intenta devolver un objeto comercial. Algo que tiene sentido para una persona de negocios como un concepto como una clase de Orden. La razón de esto es que, en general, no desea vincular al cliente del servicio web con los detalles de implementación de la aplicación que proporciona el servicio. El cliente se preocupa por las órdenes, no acerca de cómo esas órdenes se estructuran en la base de datos. Esto crearía un acoplamiento apretado que es opuesto al espíritu de un servicio web. En segundo lugar, si el cliente que utiliza el servicio web no es un cliente .net, terminaría con un XML bastante desagradable para crear/analizar con el fin de leer/escribir el conjunto de datos que no sería un tipo de datos en su plataforma.

1

No utilizaría conjuntos de datos sobre los servicios web por las siguientes razones (que pueden o no ser relevante en su caso):

  • Los conjuntos de datos son la tecnología EM, ¿qué ocurre si desea llamar al servicio web de un cliente de Java?
  • No tiene control sobre los cambios que realiza el cliente. Acaba de obtener una lista de cambios que se conservan en la base de datos.
  • Los conjuntos de datos incluyen mucha información que puede no ser necesaria, lo que lleva a problemas de rendimiento.
0

Estoy totalmente sorprendido por la cantidad de personas que no se dan cuenta de la decisión atroz de tener un servicio web que devuelva un DataSet.

Un DataSet es un tipo .NET personalizado. El objetivo de un servicio web es que pueda ser llamado por cualquier idioma en cualquier plataforma.

En pocas palabras, si un servicio web devuelve un DataSet, ¡entonces no es un servicio web!

+0

es XML. El código de llamada en .NET puede reconstituirlo en un conjunto de datos. Desde otra plataforma, pueden tratarlo como XML y encontrar la información. No es como devolver un blob binario. –

+0

Sí, no es un blob binario, pero vamos, diseñar un método que tenga una cadena como su tipo de devolución que contiene una carga de XML no es un buen diseño. (Independientemente de si está hablando de un servicio web o de cualquier otro tipo de servicio/método). – gusgorman

Cuestiones relacionadas