当我尝试为datasnap创建自定义传输过滤器并使用它时,当我运行客户端应用程序时出现错误说明:
模块ProjectAdminClient.exe中的异常TDBXError。 Filter Log Rejected设置参数FilterUnit给定值1024.此时由于此不兼容性,无法进行服务器通信。
造成这种情况的原因是什么?
答案 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代码中工作。