Вопрос по wcf, odata, delphi-2010, entity-framework, interop – Использование службы CF WCF от клиента Delphi 2010: привязка данных и платформа Entity Framework

2

Я перевожу Win32 Delphi VCL-приложение, написанное в Delphi 2010, на многоуровневую архитектуру.
Приложение широко использует ExpressGrids (TcxGrid) от devexpress для привязки данных.

I have designed the data tier based on Entity framework, using dbContext and Data transfer objects. I have expose the CRUD operations via WCF using T4 templates based on the entity data model.

Все это работает нормально, клиент 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.

Я знаю, что вопрос старый, но я был бы признателен за любые идеи о совместимости и миграции унаследованного кода.

Спасибо

Хорошо, больше информации. Поддержка Delphi 2010 WCF ненадежна. Изначально импортер WSDL работал, но по мере увеличения сложности импортер WSDL заходит в бесконечный цикл. В конце концов, мне пришлось представить сервисы как ASMX wsdls, и теперь файл pass импорта 1.6 МБ wsdl теперь составляет 300 КБ. И интеграция практически безупречна. Я до сих пор не нашел надежного способа сбора объектов данных в сетках в Delphi, и, похоже, вся информация о многоуровневых решениях опускает многоплатформенное решение. Это все Delphi или все .Net. До сих пор это был хороший учебный опыт. reckface
Я изучил службы данных WCF (oData), и это может быть лучше для привязки данных, но мне также придется написать некоторую логику для анализа возвращенных каналов атомов. Также я не уверен, как запросить связанные данные из URL. reckface
Ваш вопрос хорошо написан, но у вас, похоже, довольно экзотическое сочетание технологий. Если вы наберете больше SO репутации, вы сможете привлечь больше внимания, предложив награду за этот вопрос. Jeroen
Правда в том, что между Delphi и C # нет простого взаимодействия. Мне удалось добиться привязки данных путем создания набора данных клиента на основе примера из ExpertsExchange. Он включал переопределение события OnAfterExecute для компонента HTTPRio, а также ручной анализ конверта мыла для создания структуры DataSet и последующего заполнения данных. reckface
Вот Это Да! Еще один вопрос. reckface

Ваш Ответ

0   ответов

Похожие вопросы