Транспортные фильтры в Delphi XE Datasnap

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

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

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


person Nathan Barrett    schedule 09.11.2010    source источник


Ответы (2)


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

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).

Гротьес, Боб Сварт

person Bob Swart    schedule 09.11.2010
comment
Где вы размещали/добавляли или прикрепляли код? Я этого не вижу. Не стесняйтесь, присылайте мне по электронной почте. - person Bob Swart; 10.11.2010

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

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

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

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

person Rich Shealer    schedule 08.02.2011