0

datasnap 用のカスタム トランスポート フィルターを作成して使用しようとすると、クライアント アプリを実行すると、次のようなエラーが表示されます。

モジュール ProjectAdminClient.exe の例外 TDBXError。Filter Log Rejected 設定パラメータ FilterUnit に値 1024 が指定されました。この時点で、この非互換性のため、サーバー通信は不可能です。

これは何が原因ですか?

4

2 に答える 2

3

フィルター パラメーターを使用していますか? カスタム トランスポート フィルターも作成しましたが、このエラーは発生しませんでした。何もしないログフィルターの例を次に示します...

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 コースウェア マニュアルの例の 1 つです)。

グローチェス、ボブ・スワート

于 2010-11-09T21:48:35.287 に答える
0

ボブ博士のDelphi2010DatasnapホワイトペーパーのLogFilterを使用して同様の問題が発生したときに、この質問を見つけました。

問題は、少なくとも部分的には、ログフィルターを操作しようとしたときに同時にZLibCompressionフィルターをロードしたことです。手がかりはServerContainerUnit1.dfmにありました

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

同じくエラーになっている1024を見て、ZLibフィルターなしで試す価値があると考えました。クライアントとサーバーから削除しました。これで、ログフィルターが機能します。サーバー時間を取得し、LogFilterコードで機能するブレークポイントを取得します。

于 2011-02-08T21:35:25.033 に答える