Estoy usando un servicio web para consultar datos de una tabla. Entonces tengo que enviarlo a un usuario que lo quiere como una DataTable. ¿Puedo serializar los datos? O debería enviarlo como un conjunto de datos. Soy nuevo en los servicios web, por lo que no estoy seguro de la mejor manera de hacerlo.¿Puedo serializar una tabla de datos o un conjunto de datos para transferirlos a través de un servicio web en C#?
Respuesta
Puede transferir DataTable a través de un servicio web. Esa es probablemente su mejor opción, porque eso es lo que el cliente solicitó.
Sure. Tanto DataTable como DataSet son serializables, y también tienen funciones ReadXml() y WriteXml() que usted puede usar también.
Si lo expone como DataSet
/DataTable
, de todos modos hará su propia serialización (a través de IXmlSerializable
, IIRC). Tenga en cuenta que DataSet
/DataTable
no constituyen buenos tipos de datos en servicios web si desea que el servicio sea portátil para otras patforms (es decir, un cliente Java, etc.). Pero puede simplemente exponerlo como tal si lo desea ...; .NET se ocupará de la traducción.
Ver this post por Richard Blewett por razones por las que probablemente no desee hacer esto.
EDIT: Para resumir lo anterior:
- Usando
DataSet
no es interoperable. Utiliza anotaciones que solo tienen sentido cuando cada extremo del enlace usa la pila de Microsoft. DataSet
es una clase bastante ineficiente para enviar datos a través del cable - contiene también datos de seguimiento de cambios y metadatos.- Introduce un acoplamiento hermético: los cambios realizados en el lado del servicio que quizás ni siquiera necesiten los clientes deben reflejarse también en el lado del cliente.
enlace ya no funciona – betitall
en serio, un voto a favor porque un enlace a un sitio externo publicado hace 4 años dejó de funcionar? se reubicó el blog encontrado y se actualizó el enlace –
Lo siento, no tenía claro el protocolo y el significado de la votación negativa. Solo quise indicar que el enlace estaba roto. Vázquez eliminado. – betitall
Puede enviar los datos como una cadena XML de un conjunto de datos por DataSet.GetXml()
Y que el usuario puede deserializar con DataSet.ReadXml()
y conseguir la tabla de datos del conjunto de datos por DataSet.Tables
Buena suerte
La forma más simple e interoperable es serializar el conjunto de datos a XML con el método GetXml(), luego pasar th th como una cadena del servicio web. El cliente puede entonces deserializarlo con el método ReadXml().
Hemos consumido un servicio que lo hizo de esta manera, y funcionó muy bien.
La alternativa es exponer la clase DataSet en el servicio y devolver el objeto del conjunto de datos. Pero esto complicará las cosas, especialmente si algún cliente no debe ser .NET.
DataTable son serializables pero existen algunos trucos para devolver un DataTable sin tipo a través de WebService.
Antes de que el método de servicio web devuelva la tabla de datos llena (en el lado del servicio) debe tener asignada la propiedad TableName.En caso de que dentro de OperationContract DataTable reciba la referencia de DataTable mecanografiada, la serialización fallará con messaga como "" El servidor no proporcionó una respuesta significativa; Esto puede deberse a una falta de coincidencia de contrato, un cierre prematuro de la sesión o un error interno del servidor. "
Significa que debe llenar el DataTable creado, por ejemplo, utilizando el método Merge (o manualmente). Aquí están ejemplos de implementación de DataContract ;
DataTable IHorizonCLService.RetrieveChangeLog(int iId)
{
DataTable dt = new DataTable(); //create new DataTable to be returned by this web method
dt.Merge(HorMan.RetrieveChangeLog(iId)); //get typed DataTable and fills the DataTable
dt.TableName = "SurChangeLogHor"; //assigns name
return dt;
}
Sólo una interesante observación de here
y, nunca, nunca, nunca enviar una instancia de System.Data.DataSet sobre el alambre nunca ha habido, no es ahora, y. nunca habrá ninguna razón para enviar alguna instancia de este tipo en cualquier lugar. Está más allá de lo masivo y hace que el objeto de transferencia de datos de 10,000 propiedades parezca liviano. El hecho de que algo sea serializable no significa que deba serlo.
- 1. Rellenar un conjunto de datos o una tabla de datos de un conjunto de resultados de consultas LINQ
- 2. ¿Transfiriendo datos binarios a través de un servicio web SOAP?
- 3. Cómo puedo convertir una tabla de datos a un conjunto de datos relacionado
- 4. Devolver datos XML de un servicio web
- 5. Cómo enlazar una tabla en un conjunto de datos a una cuadrícula de datos WPF en C# y XAML
- 6. ¿Debo devolver un conjunto de datos fuertemente tipado de un servicio web?
- 7. servicio web/servicio wcf, ¿es mejor devolver un conjunto de datos?
- 8. ¿Cuál es su método preferido para enviar datos complejos a través de un servicio web?
- 9. ¿Qué significa serializar datos o un objeto?
- 10. la adición de una tabla de datos en un conjunto de datos
- 11. Valores promedio de un conjunto de datos de punto a un conjunto de datos de cuadrícula
- 12. ¿Cómo puedo pasar datos de un manejador SOAP a un cliente de servicio web?
- 13. ¿Cómo expongo los datos en formato JSON a través de un servicio web utilizando Java?
- 14. C#: iteración a través de una tabla de datos: Filas, Select() o AsEnumerable()
- 15. Cómo serializar datos en C
- 16. ¿Cómo publicar datos a un servicio web utilizando JSON?
- 17. Inyectando datos a un servicio de WCF
- 18. ¿Cómo agregaría datos nuevos a través de un servicio REST opuesto al servicio de estilo RPC?
- 19. ¿Cómo transferir un java.util.Map a través de un servicio web?
- 20. ¿Cómo puedo usar C++ para enviar datos a través de un websocket?
- 21. El envío de datos a un sitio web de un servicio WCF
- 22. C# bucle a través de la tabla de datos, cambiando los datos
- 23. Cómo filtrar un valor de conjunto de datos con otro conjunto de datos Valor de tabla en SSRS
- 24. ¿Cómo serializo un objeto anónimo para enviarlo a través de un servicio web SOAP?
- 25. Importar XML en conjunto de datos C#
- 26. escribir un impulso :: multi_array a HDF5 conjunto de datos
- 27. Convertir lista genérica a conjunto de datos en C#
- 28. C# Conjunto de datos para acceder al DB
- 29. Serialización de pares de nombre/valor en un objeto personalizado a través del servicio web
- 30. Serializar un conjunto de consultas django-haystack
Asegúrate de configurar TableName, o se producirá un error al serializar. – tsilb