2010-11-09 28 views
0

Lorsque je tente de créer un transport personnalisé filtre pour datasnap et de l'utiliser, quand je lance l'application client je reçois une erreur indiquant:Filtres de transport en Delphi XE Datasnap

Exception TDBXError dans le module ProjectAdminClient.exe. Filter Log Paramètre de configuration rejeté FilterUnit valeur donnée 1024. À ce stade, la communication du serveur n'est pas possible en raison de cette incompatibilité.

À quoi est-ce dû?

Répondre

3

Utilisez-vous des paramètres de filtre? J'ai également créé des filtres de transport personnalisés, mais je n'ai jamais rencontré cette erreur. Voici un exemple filtre de journal ne rien faire ...

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. 

Celui-ci fonctionne très bien pour moi (l'un de l'exemple de mon prochain Delphi XE DataSnap Development Essentials manuel courseware).

Groetjes, Bob Swart

+0

maintenant le filtre ne fait rien ici est le code: –

+0

Où avez-vous placé/ajouter ou joindre le code? Je ne le vois pas. N'hésitez pas à m'envoyer un mail. –

0

Je trouve cette question quand j'eu un problème similaire en utilisant la LogFilter du Dr Bob de son Delphi 2010 Datasnap Livre blanc. Le problème, au moins en partie, est que j'ai eu le filtre ZLibCompression chargé en même temps que j'essayais de travailler avec le filtre de journal. L'indice était dans le ServerContainerUnit1.dfm

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

j'ai vu 1024 qui était aussi dans l'erreur et pensé qu'il valait la peine d'essayer sans filtre zlib. Je l'ai retiré du client et du serveur. Maintenant, le filtre de journal fonctionne. J'obtiens le temps de serveur et obtiens des points d'arrêt pour fonctionner dans le code de LogFilter.