Tutorial: Einen DataSnap-REST-Server mit einer Anwendung verwenden

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Tutorials zu Datenbanken und LiveBindings


Die DataSnap-Technologie ermöglicht, Client-Serveranwendungen zu erstellen, die über das Internet, das lokale Netzwerk oder den lokalen Host kommunizieren.

Das folgende Beispiel demonstriert die Verwendung von DataSnap beim Erstellen einer einfachen lokalen Client-Serveranwendung. Die Client- und die Serveranwendungen sind in Delphi implementiert. Nach dem Erstellen des Servers und der Aktivierung der Verbindung zwischen dem Client und dem Server mit DataSnap kann der Client Methoden aufrufen, die auf dem Server definiert und implementiert sind.

Ein Server kann entweder in Delphi oder C++Builder implementiert werden. Der Client muss nicht in derselben Sprache implementiert werden. Sie können z. B. einen Delphi-Server und einen C++Builder-Client oder umgekehrt verwenden.

DataSnap-Serverkomponenten

Die Hauptkomponenten sind:

Die TDSServer-Komponente ist das logische Herz der DataSnap-Serveranwendung. Sie enthält die Methoden Start und Stop zum Starten und Stoppen des Servers und außerdem die Eigenschaft AutoStart. Standardmäßig ist der Wert von AutoStart auf True gesetzt, sodass der Server beim Anwendungsstart automatisch startet. Sie benötigen nur eine TDSServer-Komponente pro Serveranwendung.

Die Komponente TDSServerClass repräsentiert eine Serverklasse. Der DataSnap-Server erstellt automatisch Instanzen der Serverklassen und gibt diese auch automatisch frei.

Das HTTP-Kommunikationsprotokoll ermöglicht die Kommunikation zwischen Client und Server.

Erstellen der Serveranwendung

  1. Erstellen Sie ein neues Projekt:
    • Wählen Sie im Hauptmenü Datei > Neu > Weitere .
    • Erweitern Sie in der linken Spalte unter "C++Builder-Projekte" oder "Delphi-Projekte" den Knoten DataSnap-Server.
    • Wählen Sie DataSnap-REST-Anwendung, und klicken Sie auf "OK".
    • Legen Sie den Anwendungstyp fest:
      1. Wählen Sie Eigenständige Formularanwendung aus, und klicken Sie auf die Weiter-Schaltfläche.
      2. Wählen Sie eine der folgenden Optionen aus:
        • VCL-Anwendung
        • FireMonkey-Anwendung
      3. Behalten Sie die Vorgabewerte bei, damit das HTTP-Kommunikationsprotokoll verwendet wird, und klicken Sie auf die Schaltfläche Weiter.
      4. Wählen Sie die Option Server-Methodenklasse aus, und klicken Sie auf die Schaltfläche Weitere.
      5. Wählen Sie TComponent aus, um die Serverklasse vollständig zu implementieren, und klicken Sie auf die Schaltfläche Weiter.
      6. Wählen Sie den Speicherort für das Projekt aus, und klicken Sie auf die Schaltfläche Fertig stellen.
  2. Ändern Sie die Eigenschaft Caption von Form1 in ServerForm.
    ServerFormDSTutorial.png
  3. Klicken Sie im Hauptmenü auf Datei > Alles speichern.
  4. Speichern Sie FormUnit1 unter ServerUnit, WebModuleUnit1 unter WebModuleUnit1, ServerMethodsUnit1 unter ServerMethodsUnit1 und das Projekt unter MyServerProj.
    Damit wurden alle benötigten DataSnap-Komponenten automatisch zu WebModuleUnit1 hinzugefügt:
    WebModuleDSApplication.png
  1. ServerMethodsUnit1 enthält die Implementierung zweier einfacher Methoden (EchoString und ReverseString), die den als Parameter übergebenen Wert (Value) im normalen bzw. im umgekehrten Status zurückgeben. In diesem Beispiel wurde ServerMethodsUnit1 eine neue Methode – die Summer zweier Gleitkommazahlen – hinzugefügt:
    In Delphi:
    unit ServerMethodsUnit1;
    
    interface
    uses System.SysUtils, System.Classes, Datasnap.DSServer, Datasnap.DSAuth;
    type
      {$METHODINFO ON}
      TServerMethods1 = class(TComponent)
      private
        { Private declarations }
      public
        { Public declarations }
         function Sum(const A, B: Double): Double;
      end;
      {$METHODINFO OFF}
    
    implementation
    uses System.StrUtils;
    
    function TServerMethods1.Sum(const A, B: Double): Double;
    begin
      Result := A + B;
    end;
    
    end.
    

    Hinweis: Die Direktive {$METHODINFO ON} bewirkt das Erzeugen der vom DataSnap-Server benötigten Laufzeitinformationen. Sie ist daher erforderlich und nicht nur ein Kommentar! Weitere Informationen finden Sie unter METHODINFO-Direktive (Delphi).

    In C++:

    Fügen Sie "ServerMethodsUnit1.h" diese Funktionsdeklaration hinzu:

    double __fastcall sum(double A, double B);
    

    Vervollständigen Sie die gerade hinzugefügte Funktion in "ServerMethodsUnit1.cpp":

    double __fastcall TServerMethods1::sum(double A, double B)
    {
    	return A + B;
    }
    
  2. Führen Sie vor dem Erstellen der Client-Anwendung den Server aus:
    • Wählen Sie im Hauptmenü Start > Ohne Debugger ausführen .
    • Klicken Sie auf die Schaltfläche Start. Sie können das angezeigte ServerForm-Dialogfeld minimieren.

Erstellen der Client-Anwendung

  1. Führen Sie die folgenden Schritte aus, um die Client-Anwendung in derselben Projektgruppe wie die Serveranwendung zu erstellen:
    • Klicken Sie in der Projektverwaltung mit der rechten Maustaste auf den Knoten Projektgruppe.
    • Wählen Sie die Option Neues Projekt hinzufügen aus.
    • Wählen Sie aus der Kategorie Delphi-Projekte Desktop-Anwendung aus, und klicken Sie auf die OK-Schaltfläche.
    • Wählen Sie Leere Anwendung aus, und klicken Sie auf die Schaltfläche OK.
    • Klicken Sie im Hauptmenü auf Datei > Neu > Weitere.
    • Markieren Sie in der linken Spalte den Knoten DataSnap-Server, wählen Sie DataSnap-REST-Client-Modul aus, und klicken Sie auf die Schaltfläche OK.
      RESTClientModuleMenu.png
    • Legen Sie den Typ des Moduls fest:
      • Belassen Sie den Standardwert Lokaler Server ausgewählt, und klicken Sie auf die Schaltfläche Weiter.
      • Belassen Sie den Standardwert Eigenständiger DataSnap-Server ausgewählt, und klicken Sie auf die Schaltfläche Weiter.
      • Behalten Sie die Standardwerte für die Verbindungsparameter bei, und klicken Sie auf die Schaltfläche Fertig stellen.
      Der Experte hat nun die Units ClientModuleUnit und ClientClassesUnit erzeugt.
  2. Ändern Sie die Eigenschaft Caption von Form2 in ClientForm.
  3. Klicken Sie im Hauptmenü auf Datei > Alles speichern.
  4. Speichern Sie Unit2 unter ClientUnit, ClientModuleUnit1 unter ClientModuleUnit, ClientClassesUnit1 unter ClientClassesUnit und das Projekt unter MyClientProj.
  5. Speichern Sie die Projektgruppe unter dem Namen DSServerExample.
  6. Fügen Sie dem Client-Formular die Steuerelemente hinzu, die für die Eingabedaten und für das Ergebnis (Beschriftungen, Eingabefelder und eine Schaltfläche zum Berechnen der Summe) benötigt werden, wie in der folgenden Abbildung gezeigt. Ändern Sie die Eigenschaft Name von TEdit neben der Beschriftung A in EditA und die Eigenschaft Name von TEdit für B in EditB. Setzen Sie die Eigenschaft Name von Result-TEdit auf EditResult. Setzen Sie die Eigenschaft Text aller TEdit-Steuerelemente auf einen leeren Wert. Setzen Sie Name von TButton auf Calculate.
    Das Client-Formular sollte nun etwa folgendermaßen aussehen:
    DSAppClientForm2.png
  7. Fügen Sie der Unit-Liste in ClientUnit.pas die Unit-Namen ClientClassesUnit und ClientModuleUnit hinzu.
  • Fügen Sie für C++ die Zeilen #include "ClientClassesUnit.h" und #include "ClientModuleUnit.h" am Anfang der ClientUnit.cpp ein.
  1. Rufen Sie nun die gewünschten Methoden in der Client-Anwendung auf. Implementieren Sie für dieses Beispiel das Ereignis OnClick für die TButton-Komponente, um die Methode Sum der gerade automatisch erzeugten DataSnap-Client-Unit aufzurufen. Die Ereignisbehandlungsroutine der Schaltfläche ist TClientForm.CalculateClick (Delphi) oder TClientForm::Button1Click (C++).

    In Delphi:

    procedure TClientForm.CalculateClick(Sender: TObject);
    var
      Temp: TServerMethods1Client;
      A, B: Double;
    begin
      Temp := TServerMethods1Client.Create(ClientModule1.DSRESTConnection1);
    try
      A := StrToFloat(EditA.Text);
      B := StrToFloat(EditB.Text);
      EditResult.Text := FloatToStr(Temp.Sum(A, B));
    finally
      Temp.Free;
    end;
    end;
    
    In C++:
    void __fastcall TClientForm::Button1Click(TObject *Sender)
    {
      TServerMethods1Client *Temp;
      double A, B;
    
      Temp = new TServerMethods1Client(ClientModule1->DSRestConnection1);
      try
      {
        A = StrToFloat(EditA->Text);
        B = StrToFloat(EditB->Text);
        EditResult->Text = FloatToStr(Temp->sum(A,B));
      }
      __finally
      {
        delete Temp;
      }
    }
    
    Hinweis: Wenn Sie die Definition der Servermethoden geändert haben, müssen Sie den Proxy aktualisieren. Klicken Sie dazu in der Unit ClientModuleUnit mit der rechten Maustaste auf die Komponente TDSRestConnection, und klicken Sie im Kontextmenü auf DataSnap-Client-Klassen erzeugen.
  2. Erzeugen Sie nun die Anwendung, und führen Sie sie aus. Das Client-Formular wird angezeigt. Geben Sie in die Felder A und B Dezimalzahlen ein, klicken Sie auf die Schaltfläche Calculate. Die Summe der beiden Zahlen sollte im Feld Result angezeigt werden.
    DSAppClientRunning.png

Siehe auch