Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Datasnap RestServer CRUD POST-Daten (https://www.delphipraxis.net/184688-datasnap-restserver-crud-post-daten.html)

Starsky911 14. Apr 2015 15:05

Datasnap RestServer CRUD POST-Daten
 
Ich versuche mit Javascript (ExtJS) auf einen RestServer zuzugreifen.
Das Daten laden funktioniert soweit mit der Funktion "GetKundeListe".
Das routen auf die entsprechenden Änderungsfunktionen funktioniert
auch z.B. das löschen über die Funktion "cancelGetKundeListe".

Das routen beim Update auf die Funktion "acceptGetKundeListe"
und das setzen des Schlüssels "kdid" funktioniert auch.
Das Problem ist das die Änderungsdaten die als JSON-Format als
PUT geliefert werden nicht an die Funktion über "jObject"
weitergegeben werden.
Kann mir da einer weiterhelfen? :-)

Delphi-Quellcode:
type
{$METHODINFO ON}
  TServerMethods1 = class(TDataModule)
    FDConnection1: TFDConnection;
    FDQuery1: TFDQuery;
    FDPhysODBCDriverLink1: TFDPhysODBCDriverLink;
    procedure DataModuleCreate(Sender: TObject);
  private
    function ToJSONData(ads: TDataSet): TJSONArray;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    function EchoString(Value: string): string;
    function ReverseString(Value: string): string;
    function GetKundeListe(kdid: string): TJSONObject;
    procedure cancelGetKundeListe(kdid: string): string;
    procedure acceptGetKundeListe(kdid: string; jObject: TJSONObject);

  end;
{$METHODINFO OFF}
Vielen Dank im voraus.
Starsky

Starsky911 16. Apr 2015 07:14

AW: Datasnap RestServer CRUD POST-Daten
 
Hallo,

ich bin in der Sache etwas weiter gekommen.
Zumindest kommen die Daten die über PUT gesendet werden beim RestServer an.
Es kommt dann allerdings zu folgenden Fehlermeldung:

Delphi-Quellcode:
Thread-Start: Thread-ID: 2956. Prozess WebRestServer.exe (380)
Modul laden: dhcpcsvc.DLL. Ohne Debug-Infos. Basisadresse: $74AE0000. Prozess WebRestServer.exe (380)
Modul laden: dhcpcsvc6.DLL. Ohne Debug-Infos. Basisadresse: $74AD0000. Prozess WebRestServer.exe (380)
Erste Gelegenheit für Exception bei $7667B727. Exception-Klasse TDBXError mit Meldung 'JSON-Werteingabe {"vip":true,"age":33,"telephones":["000000000","111111111111"],"adresses":[{"adress":"blabla","pc":57000,"city":"Metz"},{"adress":"blabla","pc":44000,"city":"Nantes"}],"size":1.83,"name":"Henri Gourvest"} kann nicht in TDBXTypes.WideString konvertiert werden'. Prozess WebRestServer.exe (380)
Gesendet wurden die Daten über einen RestClient mit folgendem Code:
Delphi-Quellcode:
  lJSO := SO(Memo2.Lines.Text);
  lRequest := TStringStream.Create(lJSO.AsString, TEncoding.UTF8);
  try
    IdHTTP1.Request.ContentType := 'text/xml; charset=utf-8';//'text/plain;charset=UTF-8';
    IdHTTP1.Request.Accept := 'application/json';
    IdHTTP1.Request.Charset := 'utf-8';
    try
      lResponse := IdHTTP1.Put(Edit1.Text, lRequest);
      Memo1.Lines.Text:=lResponse;
    except
      on E: Exception do
        ShowMessage('Error on request:'#13#10 + E.Message);
    end;
  finally
    lRequest.Free;
  end;
Warum kommt es zu dieser TDBXError Fehlermeldung?
Ausgelöst wird diese Fehlermeldung in der Unit Data.DBXJSONCommon
in der Procedure TDBXJSONTools.JSONToDBX.
Kann da vielleicht einer einen Tipp geben :-)

Gruß
Starsky

mjustin 16. Apr 2015 10:25

AW: Datasnap RestServer CRUD POST-Daten
 
Zur Fehlereinkreisung würde ich einen Wireshark oder Fiddler Mitschnitt der HTTP Kommunikation bei dem PUT und bei einem funktionierenden Fall, z.B. POST, erstellen, und dann beide auf Unterschiede prüfen.

Starsky911 17. Apr 2015 08:48

AW: Datasnap RestServer CRUD POST-Daten
 
Ich habe den Fehler gefunden.
Es lag nicht an den JSON PUT-Parameter sondern
an den URL Parameter der nicht richtig gesetzt war.
Sehr irreführende Fehlermeldung:roll:
Aber jetzt funktioniert es...:-D

Gruß
Starsky

Sanchez 22. Jun 2018 10:31

AW: Datasnap RestServer CRUD POST-Daten
 
Hallo,

Nachdem ich gerade an einem ähnlichen Fehler nachforsche: Was war bei dir genau das Problem?

Grüße,
Daniel


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz