当我尝试为 datasnap 创建自定义传输过滤器并使用它时,当我运行客户端应用程序时,我收到一条错误消息:
模块 ProjectAdminClient.exe 中的异常 TDBXError。Filter Log Rejected 设置参数 FilterUnit 给定值 1024。此时,由于这种不兼容性,服务器通信是不可能的。
这是什么原因造成的?
您是否使用过滤器参数?我还创建了自定义传输过滤器,但从未遇到此错误。这是一个无操作日志过滤器示例...
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,鲍勃·斯沃特
当我使用他的 Delphi 2010 Datasnap 白皮书中的 Bob 博士的 LogFilter 遇到类似问题时,我发现了这个问题。
至少部分问题是我在尝试使用日志过滤器的同时加载了 ZLibCompression 过滤器。线索在 ServerContainerUnit1.dfm
Filters = <
item
FilterId = 'ZLibCompression'
Properties.Strings = (
'CompressMoreThan=1024')
end>
我看到 1024 也在错误中,并认为没有 ZLib 过滤器值得尝试。我从客户端和服务器中删除了它。现在日志过滤器工作。我获取服务器时间并获取断点以在 LogFilter 代码中工作。