Delphi XE Datasnap中的传输过滤器

时间:2010-11-09 20:18:55

标签: delphi filter delphi-xe datasnap transport

当我尝试为datasnap创建自定义传输过滤器并使用它时,当我运行客户端应用程序时出现错误说明:

模块ProjectAdminClient.exe中的异常TDBXError。 Filter Log Rejected设置参数FilterUnit给定值1024.此时由于此不兼容性,无法进行服务器通信。

造成这种情况的原因是什么?

2 个答案:

答案 0 :(得分:3)

您使用过滤器参数吗?我还创建了自定义传输过滤器,但从未遇到过此错误。这是一个示例do-nothing log filter ...

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,Bob Swart

答案 1 :(得分:0)

当我在他的Delphi 2010 Datasnap白皮书中使用Dr Bob的LogFilter遇到类似的问题时,我发现了这个问题。

问题,至少部分是我在尝试使用日志过滤器的同时加载了ZLibCompression过滤器。线索在ServerContainerUnit1.dfm

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

我看到1024也是错误,并认为没有ZLib过滤器值得尝试。我从客户端和服务器上删除了它。现在日志过滤器工作。我获得服务器时间并获得断点以在LogFilter代码中工作。