Транспортные фильтры в Delphi XE Datasnap - PullRequest
0 голосов
/ 09 ноября 2010

Когда я пытаюсь создать пользовательский транспортный фильтр для datasnap и использовать его, при запуске клиентского приложения появляется сообщение об ошибке:

Исключение TDBXError в модуле ProjectAdminClient.exe.Журнал фильтра Отклонено параметру настройки FilterUnit с заданным значением 1024. На этом этапе связь с сервером невозможна из-за этой несовместимости.

Что вызывает это?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2010

Используете ли вы параметры фильтра? Я также создал пользовательские транспортные фильтры, но никогда не сталкивался с этой ошибкой. Вот пример фильтра журнала бездействия ...

unit LogFilter;
interface
uses
  SysUtils, DBXPlatform, DBXTransport;

type
  TLogFilter = class(TTransportFilter)
  public
    constructor Create; override;
    destructor Destroy; override;
    function ProcessInput(const Data: TBytes): TBytes; override;
    function ProcessOutput(const Data: TBytes): TBytes; override;
    function Id: UnicodeString; override;
  end;

const
  LogFilterName = 'Log';

implementation
uses
  CodeSiteLogging;

constructor TLogFilter.Create;
begin
  inherited Create;
  CodeSite.Send(csmBlue,'TLogFilter.Create');
end;

destructor TLogFilter.Destroy;
begin
  CodeSite.Send(csmBlue,'TLogFilter.Destroy');
  inherited Destroy;
end;

function TLogFilter.ProcessInput(const Data: TBytes): TBytes;
begin
  Result := Data;
  CodeSite.Send(csmYellow, 'ProcessInput ' + IntToStr(Length(Data)),
    TEncoding.ASCII.GetString(Data));
end;

function TLogFilter.ProcessOutput(const Data: TBytes): TBytes;
begin
  Result := Data;
  CodeSite.Send(csmOrange, 'ProcessOutput ' + IntToStr(Length(Data)),
    TEncoding.ASCII.GetString(Data));
end;

function TLogFilter.Id: UnicodeString;
begin
  Result := LogFilterName;
end;

initialization
  TTransportFilterFactory.RegisterFilter(LogFilterName, TLogFilter);
finalization
  TTransportFilterFactory.UnregisterFilter(LogFilterName);
end.

Это прекрасно работает для меня (один из примеров из моего следующего учебного руководства по Delphi XE DataSnap Development Essentials).

Groetjes, Боб Сварт

0 голосов
/ 09 февраля 2011

Я нашел этот вопрос, когда у меня возникла похожая проблема с использованием LogBilter доктора Боба из его Белой книги Datasnap Delphi 2010.

Проблема, по крайней мере частично, заключается в том, что у меня был загружен фильтр ZLibCompression в то же время, когда я пытался работать с фильтром журнала. Подсказка была в ServerContainerUnit1.dfm

Filters = <
  item
    FilterId = 'ZLibCompression'
    Properties.Strings = (
      'CompressMoreThan=1024')
  end>

Я увидел 1024, который также был в ошибке, и решил, что стоит попробовать без фильтра ZLib. Я удалил его с клиента и сервера. Теперь фильтр журнала работает. Я получаю время сервера и получаю точки останова для работы в коде LogFilter.

...