Delphi 7 remobjects - сериализация компонента - PullRequest
0 голосов
/ 23 февраля 2011

У меня есть клиент-серверное приложение, встроенное в Delphi 7 и RemObjects SDK.Сообщения между клиентом и сервером являются двоичными (http://wiki.remobjects.com/wiki/BinMessage).. Мои вопросы: 1) если я заполню данные TDataSet / TDataSource и отправлю их от клиента к серверу, на компоненте DataSet компонента сервера будут содержаться данные?данные должны оставаться постоянными нет?2) Я пытался отправить компонент через RemObjects, инкапсулированный в класс-потомок TROBinaryMemoryStream, но без успеха

определение класса

  TRODataSource=class(TROBinaryMemoryStream)
   private
     FNameDS:String;
     FDS:TDataSource;
     procedure SetName(aValue:String);
     procedure SetDS(aValue:TDataSource);
  public
   published
    property Name:String read FNameDS write SetName;
    property DataSource:TDataSource read FDS write SetDS;
  end;

метод, который отправляет источник данных

function foo(aDataSource: TDataSource):integer;
var
  wStream:TRODataSource;
begin
 wStream:=TRODataSource.Create;
 wStream.Name:='TEST';
 wStream.DataSource:=aDataSource;
 try
  Result:=(RORemoteService as ISvc..).foo1(wstream);//method existing on the server will //return how many records are in the dataset
 finally
  freeandnil(wstream);
 end;
end;

любой ответ будет оценен.

LE: кажется, что только классы-потомки TROComplexType могут быть сериализованы http://wiki.remobjects.com/wiki/Remote_Object_Allocation_and_Serialization. Но я не уверен, что не могу сериализовать компонент напоток.

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Когда ваш компонент сериализован в поток (см. Мой другой пост), вы можете использовать тип «Binary» для отправки потока с сервера клиенту (и наоборот): http://wiki.remobjects.com/wiki/TROBinaryMemoryStream_Class

Или просто отправьте это как строку :-). Нет необходимости переопределять TROBinaryMemoryStream!

1 голос
/ 23 февраля 2011

Для сериализации TComponent / TPersistent (как Delphi делает с файлами .dfm), вы можете использовать «ObjectTextToBinary»: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Classes_ObjectTextToBinary@TStream@TStream.html

Однако это создает проблемы, если вы используете подобъекты (свойства объекта).

Вы также можете искать более общую сериализацию (используя RTTI) в XML и т. Д .: Библиотеки сериализации Delphi (win32) Сериализация компонентов Delphi

Редактировать:Вы можете отправить результат в виде строки в RemObjects или поместить его в TMemoryStream и использовать двоичный тип RO.

...