Использование службы CF WCF от клиента Delphi 2010: привязка данных и платформа Entity Framework
Я перевожу Win32 Delphi VCL-приложение, написанное в Delphi 2010, на многоуровневую архитектуру.
Приложение широко использует ExpressGrids (TcxGrid) от devexpress для привязки данных.
Все это работает нормально, клиент Delphi успешно обменивается данными со службой WCF для обмена объектами передачи данных.
Проблема в,how do I maintain the Databinding functionality? I am leaning toward writing a service method that returns a generic data table, or a dataset. Can I convert linq statement results to Datasets, tables or views? I am not sure I can bind Expressgrids to arrays of objects (WCF returns entity collections, but Delphi sees arrays). Has any one had experience with this type of interoperability?
EDIT
У меня есть служба данных, возвращающая DataSets, но угадайте, что? Набор данных xml из .net не совместим с Delphi (по крайней мере, 2010). Мне удалось заставить это работать, используяПример Гекко (модифицированный) , но это не будет практичным из-за сложности запросов, которые нам нужно выполнить от клиента. Теперь мы можем оставить грид как есть до завершения работы BLL и начать новый проект для перезаписи клиента на C # (в качестве веб-приложения или приложения для Windows) или написать общий плагин Grid с помощью RemObjects Hydra, чтобы вставлять в формы с сетками - пытаясь понять это сейчас.
Update Я отказался от реализации Gekko DataSet в пользу написания своей собственной, изучая формат xml, требуемый TClientDataSet в Delphi. На стороне сервера я реализовал сервис, который возвращает TClientDataSet-совместимый xml в виде байтового массива. На клиенте я загружаю это в TStringStream и затем загружаю поток в компонент TclientDataSet. Я использую это для небольших коллекций, чтобы обеспечить поиск и привязку данных во время развертывания решения Hydra.
XML примерно соответствует этому формату:
<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>
это является одним из немногих источников информации в формате xml.
Я знаю, что вопрос старый, но я был бы признателен за любые идеи о совместимости и миграции унаследованного кода.
Спасибо