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 in den Ergebnissen Windows-Features aktivieren oder deaktivieren aus.
  2. Erweitern Sie im Dialogfeld Windows-Features den Knoten Internetinformationsdienste, und führen Sie dann Folgendes aus:
    • Aktivieren Sie in Webverwaltungstools die Option IIS-Verwaltungskonsole.
    • Erweitern Sie unter WWW-Dienste den Eintrag Anwendungsentwicklungsfeatures, und klicken Sie dann auf CGI und ISAPI-Erweiterungen:
    WindowsFeatures.png

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

    • Klicken Sie im Bereich Aktionen auf Erweiterte Einstellungen, und legen Sie 32-Bit-Anwendungen aktivieren auf True fest:
    AppPoolSett.png

    Hinweis:
    • Wenn "32-Bit-Anwendungen aktivieren" auf True festgelegt ist, dann werden nur 32-Bit-Anwendungen unterstützt und für 64-Bit-Anwendungen wird ein interner Serverfehler zurückgegeben.
    • Wenn "32-Bit-Anwendungen aktivieren" auf False festgelegt ist, dann werden nur 64-Bit-Anwendungen unterstützt und für 32-Bit-Anwendungen wird ein interner Serverfehler zurückgegeben.
  4. Erweitern Sie im Bereich Verbindungen den Knoten "Sites", klicken Sie mit der rechten Maustaste auf Standardwebsite, und wählen Sie Virtuelles Verzeichnis hinzufügen aus. Geben Sie einen Alias und einen physischen Pfad ein: AddVirtualDir.png

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

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

  7. 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.
    • Legen Sie den Projekttyp auf ISAPI-DLL fest. 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 festgelegt.
  2. Legen Sie das Ausgabeverzeichnis auf den physischen 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 physischen Pfad aus Schritt 4 Konfigurieren der Entwicklungsumgebung.
    OutputDir.png

  3. Erzeugen Sie das Projekt.
  4. Vergewissern Sie sich, 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: Browser.png

  6. 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.
    
  7. Erzeugen Sie die Project1.dll. Falls ein Fehler auftritt, stoppen Sie den Server im IIS-Manager, erzeugen das Projekt und starten dann den Server.
  8. Rufen Sie die Methode im Browser auf. Das Standardmuster für einen DataSnap/REST-Aufruf lautet:

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

    Bedeutung der Parameter:
    • Servername ist der Name des Servers oder der Domäne (ein Standardbestandteil der HTTP-Anforderung).
    • Port ist erforderlich, wenn kein standardmäßiger Port für http oder https zugewiesen ist.
    • /datasnap/rest ist das Muster für eine spezielle Sendungsbehandlung 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 der ProjectGroup1 eine neue Geräteübergreifende Anwendung hinzu.
  2. Ziehen Sie eine TDSRestConnection-Komponente auf das Formular.
    • Legen Sie im Objektinspektor die Eigenschaft Host auf localhost fest.
    • Ändern Sie LoginPrompt in False.
    • Legen Sie UrlPath auf myExample/Project1.dll fest.
    • Klicken Sie mit der rechten Maustaste auf die Komponente DSRestConnection1 in Form1, und wählen Sie DataSnap-Client-Klassen erzeugen aus. Die neue Unit ClientClassesUnit1.pas wird Ihrem Projekt hinzugefügt.
  3. Wechseln Sie zurück zu Form1 in Unit1, und legen Sie zwei TLabel-Komponenten auf dem Formular ab. Ä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 und Last.
  5. Legen Sie eine TButton-Komponente auf dem Formular ab, und legen Sie die Eigenschaft Text auf SayHello fest. ClientForm.png

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

Siehe auch