Consumiendo el servicio WCF de C # del cliente Delphi 2010: Marco de datos y Entity Framework
Estoy migrando una aplicación win32 Delphi VCL escrita en Delphi 2010 a una arquitectura de múltiples niveles.
La aplicación hace un uso extensivo de ExpressGrids (TcxGrid) por devexpress para el enlace de datos.
Todo funciona bien, el cliente Delphi se comunica con éxito con el servicio WCF para intercambiar objetos de transferencia de datos.
El problema es,¿Cómo mantengo la funcionalidad de enlace de datos?? Me inclino por escribir un método de servicio que devuelva una tabla de datos genéricos o un conjunto de datos. ¿Puedo convertir los resultados de la sentencia linq en conjuntos de datos, tablas o vistas? No estoy seguro de poder vincular Expressgrids a matrices de objetos (WCF devuelve las colecciones de entidades, pero Delphi ve matrices). ¿Alguien ha tenido experiencia con este tipo de interoperabilidad?
EDITAR
Tengo el servicio de datos devolviendo DataSets, pero ¿adivinen qué? El conjunto de datos xml de .net no es compatible con Delphi (al menos 2010). He logrado que funcione usando elEjemplo de Gekko (modificado) , pero no será práctico debido a la complejidad de las consultas que deberíamos ejecutar desde el cliente. Nuestras opciones ahora, son dejar las cuadrículas como están hasta que se complete el BLL y comenzar un nuevo proyecto para volver a escribir el cliente en C # (como una aplicación web o de Windows) o, escribir un complemento de cuadrícula genérico utilizando RemObjects Hydra, para incrustar en formas con cuadrículas, tratando de resolver eso ahora.
Actualizar He abandonado la implementación de Gekko DataSet a favor de escribir la mía estudiando el formato XML requerido por TClientDataSet en Delphi. En el lado del servidor, he implementado un servicio que devuelve xml compatible con TClientDataSet en forma de una matriz de bytes. En el cliente, cargué esto en un TStringStream y luego cargué el flujo en el componente TclientDataSet. Lo uso para pequeñas colecciones para proporcionar búsquedas y enlace de datos mientras implementamos la solución Hydra.
El xml sigue aproximadamente este formato:
<code>"2.0"> <METADATA> <FIELDS> <FIELD attrname="ID" fieldtype="i4"/> <FIELD attrname="Status" fieldtype="string" WIDTH="10"/> <FIELD attrname="Created" fieldtype="date"/> <ROWDATA> <ROW RowState="4" ID="1" Status="Code1" Created="20130707" Made="20130707T21:37:55341" Stopped="00:00:00000" Volume="1174" IsReady="TRUE"/> <ROW RowState="4" ID="2" Status="Code2" Created="20130707" Made="20130707T21:37:55341" Stopped="00:00:00000" Volume="2149" IsReady="FALSE"/> </code>
Esta Es una de las pocas fuentes de información en el formato XML.
Sé que la pregunta es antigua, pero agradecería cualquier información sobre la interoperabilidad y la migración de código heredado.
Gracias