Tutorial: DataSnap-Anwendung mit einem ISAPI-DLL-Server

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Tutorials zu Datenbanken und LiveBindings

In diesem Tutorial werden die grundlegenden Schritte zum Erstellen einer einfachen Client/Server-Anwendung beschrieben. Der Server wird als ISAPI-DLL-Anwendung implementiert, und der Client ist in Delphi geschrieben. 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.

Die Hauptschritte sind:

Konfigurieren der Entwicklungsumgebung

  1. Klicken Sie auf Start, und geben Sie in das Suchfeld "Windows-Funktionen" ein. Wählen Sie dann aus den Ergebnissen Windows-Funktionen ein- oder ausschalten aus.
  2. Erweitern Sie im Dialogfeld Windows-Funktionen den Knoten Internetinformationsdienste. Führen Sie dann Folgendes aus:
    • Aktivieren Sie in Webverwaltungstools die Option IIS-Verwaltungskonsole.
    • Erweitern Sie in WWW-Dienste den Eintrag Anwendungsentwicklungsfeatures, und klicken Sie dann auf CGI und ISAPI-Erweiterungen:
    WindowsFeatures.png

  3. Wenn die Windows-Funktionen aktiviert sind, klicken Sie wieder auf Start, geben in das Suchfeld "IIS" ein und öffnen Internetinformationsdienste-Manager. Erweitern Sie die Knoten Verbindungen, klicken Sie auf Anwendungspools, und wählen Sie dann DefaultAppPool aus:
  4. Enable32bit.png

    • Klicken Sie im Bereich Aktionen auf Erweiterte Einstellungen, und setzen Sie 32-Bit-Anwendungen aktivieren auf True:

    AppPoolSett.png

  5. Erweitern Sie im Bereich Verbindungen den Knoten Sites, klicken Sie mit der rechten Maustaste auf Standardwebsite, und wählen Sie Virtuelles Verzeichnis hinzufügen. Geben Sie einen Alias und einen physikalischen Pfad ein:
  6. AddVirtualDir.png

  7. Doppelklicken Sie im Stammknoten des Bereichs Verbindungen auf ISAPI- und CGI-Einschränkungen. Wählen Sie im Bereich Aktionen die Option Featureeinstellungen bearbeiten aus, und aktivieren Sie die beiden Optionen:
  8. ISAPI&CGI.png

  9. Doppelklicken Sie im Stammknoten auf Handlerzuordnungen. Wählen Sie im Bereich Aktionen die Option Featureberechtigungen bearbeiten aus, und aktivieren Sie Ausführen.
  10. EditFeaturesPerm.png

  11. Wählen Sie den Stammknoten aus, und klicken Sie im Bereich Aktionen auf Start, um den Server zu starten.

Erstellen des Servers

  1. Wählen Sie Datei > Neu > Weitere > Delphi-Projekte > DataSnap-Server und dann DataSnap-WebBroker-Anwendung aus.
    • Setzen Sie den Projekttyp auf ISAPI-DLL. Klicken Sie auf Weiter.
    • Vergewissern Sie sich, dass in den Serverfunktionen der Eintrag Server-Methodenklassen ausgewählt ist. Klicken Sie auf Weiter.
    • Wählen Sie als Vorfahrtyp TComponent aus. Klicken Sie auf Fertig stellen.
    Das neue Projekt hat zwei Units:
    • ServerMethodsUnit1 implementiert die Servermethoden für diesen DataSnap-Server. Diese Unit 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.
    • WebModuleUnit1 enthält die Komponenten, die bewirken, dass diese ISAPI-DLL als DataSnap-Server fungiert. DSHTTPWebDispatcher übernimmt für den DataSnap-Server die Verwaltung der ISAPI/WebBroker-HTTP-Anforderungen und -Antworten.
    Die Eigenschaft Server der beiden Komponenten DSHTTPWebDispatcher1 und DSServerClass1 ist auf DSServer1 gesetzt.
  2. Legen Sie das Ausgabeverzeichnis auf den physikalischen Pfad (C:\myExample) des virtuellen Verzeichnisses fest:
    • Klicken Sie in der Projektverwaltung mit der rechten Maustaste auf Project1.dll.
    • Navigieren Sie zu Optionen.
    • Ändern Sie das Ausgabeverzeichnis in den physikalischen Pfad, den Sie in Schritt 4 in Konfigurieren der Entwicklungsumgebung angegeben haben.
    OutputDir.png

  3. Erzeugen Sie das Projekt.
  4. Stellen Sie sicher, dass der Server ausgeführt wird.
  5. Rufen Sie im Browser "localhost/myExample/Project1.dll" auf. Es sollte eine Seite wie die folgende angezeigt werden:
  6. Browser.png

  7. In diesem Beispiel wird eine neue Methode namens SayHello in ServerMethodsUnit1 eingefügt. Die Methode gibt einen verketteten String wie "Hello, FirstName LastName !" zurück, wobei FirstName und LastName zwei String-Parameter sind.
    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 SayHello(FirstName: string; LastName: string): string;
      end;
    {$METHODINFO OFF}
    
    implementation
    
    uses System.StrUtils;
    
    ...
    
    function TServerMethods1.SayHello(FirstName, LastName: string): string; begin
      Result := 'Hello, ' + FirstName + ' ' + LastName + ' !';
    end;
    
    end.
    
  8. Erzeugen Sie die Project1.dll. Falls ein Fehler auftritt, stoppen Sie den Server im IIS-Manager, erzeugen das Projekt und starten dann den Server.
  9. Rufen Sie die Methode aus dem Browser auf. Das Standardmuster für einen DataSnap/REST-Aufruf lautet:

    http:// Servername[:Port]/datasnap/rest/Klassenname/Methode/Arg1/Arg2/...ArgN

    :
    • Servername ist der Name des Servers oder der Domäne (ein Standardbestandteil der HTTP-Anforderung).
    • Port ist erforderlich, wenn nicht der Standard-Port für http oder https zugewiesen wird.
    • /datasnap/rest ist das Muster für eine spezielle Verteilerbehandlung des DataSnap-Servers. (Die Werte "datasnap" und "rest" können von Bezeichnern Ihrer Wahl überschrieben werden.)
    • /Klassenname ist der Name der Klasse.
    • /Methode ist der Name der Klassenmethode (Funktion oder Prozedur).
    • /Arg1 … /ArgN sind die Parameter, die an die Methode übergeben werden. Wenn die Argumente Sonderzeichen enthalten, dann müssen Sie URL-codiert sein.

    CallingmethodBrowser.png
    Der Inhalt wird im JSON-Format angezeigt.

Erstellen des Clients

  1. Fügen Sie zu ProjectGroup1 eine neue Geräteübergreifende Anwendung hinzu.
  2. Ziehen Sie eine TDSRestConnection-Komponente auf das Formular.
    • Setzen Sie im Objektinspektor die Eigenschaft Host auf localhost.
    • Ändern Sie die Eigenschaft LoginPrompt in False.
    • Setzen Sie die Eigenschaft UrlPath auf myExample/Project1.dll.
    • Klicken Sie mit der rechten Maustaste in Form1 auf die Komponente DSRestConnection1, und wählen Sie DataSnap-Client-Klassen erzeugen. Die neue Unit ClientClassesUnit1.pas wird Ihrem Projekt hinzugefügt.
  3. Ziehen Sie in Unit1 zwei TLabel-Komponenten auf Form1. Ändern Sie deren Eigenschaft Text in FirstName für Label1 und LastName für Label2.
  4. Fügen Sie dem Formular zwei TEdit-Komponenten hinzu. Ändern Sie deren Eigenschaft Name in First bzw. Last.
  5. Ziehen Sie eine TButton-Komponente auf das Formular, und setzen Sie die Eigenschaft Text auf SayHello.
  6. ClientForm.png

  7. Wechseln Sie im Objektinspektor auf die Registerkarte Ereignisse, und implementieren Sie das OnClick-Ereignis für die SayHello-Schaltfläche (TButton):
     procedure TForm1.SayHelloClick(Sender: TObject); var
      Temp: TServerMethods1Client;
    begin
      Temp := TServerMethods1Client.Create(DSRestConnection1);
      ShowMessage(Temp.SayHello(First.Text, Last.Text));
    end;
    
  8. Speichern Sie Ihr Projekt, und klicken Sie auf Start
  9. Final.png

Siehe auch