Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Projektplanung und -Management (https://www.delphipraxis.net/85-projektplanung-und-management/)
-   -   Einen REST-Server mit Delphi/CPP Builder erstellen? (https://www.delphipraxis.net/184570-einen-rest-server-mit-delphi-cpp-builder-erstellen.html)

jaenicke 7. Mai 2015 20:14

AW: Einen REST-Server mit Delphi/CPP Builder erstellen?
 
So, hier kommt nun endlich das Beispiel.

Kernstück ist das hier:
Delphi-Quellcode:
var
  VclApplication: TApplication;
  ServiceApplication: TServiceApplication;
begin
  if WebRequestHandler <> nil then
    WebRequestHandler.WebModuleClass := TLogServerDataModule;
  if FindCmdLineSwitch('config') then // normal application with config dialog only
  begin
    VclApplication := Vcl.Forms.Application;
    VclApplication.Initialize;
    VclApplication.MainFormOnTaskbar := True;
    VclApplication.CreateForm(TfrmLogServerConfigDlg, frmLogServerConfigDlg);
    VclApplication.Run;
  end
  else if not AnsiSameText(GetParentProcessName, 'services.exe') and not FindCmdLineSwitch('install')
     and not FindCmdLineSwitch('uninstall') then // normal application
  begin
    VclApplication := Vcl.Forms.Application;
    VclApplication.Initialize;
    VclApplication.MainFormOnTaskbar := True;
    VclApplication.CreateForm(TfrmLogServerTestMain, frmLogServerTestMain);
    VclApplication.CreateForm(TLogServerDataModule, LogServerDataModule);
    LogServerDataModule.RunningAsService := False;
    VclApplication.Run;
  end
  else // service
  begin
    ServiceApplication := Vcl.SvcMgr.Application;
    if not ServiceApplication.DelayInitialize or ServiceApplication.Installing then
      ServiceApplication.Initialize;
    ServiceApplication.CreateForm(TDemoServer, DemoServer);
    ServiceApplication.CreateForm(TLogServerDataModule, LogServerDataModule);
    LogServerDataModule.RunningAsService := True;
    ServiceApplication.Run;
  end;
Sprich der Trick an der Sache ist, dass ich nachschaue, ob der Dienstmanager mein Programm gestartet hat oder der Dienst gerade installiert oder deinstalliert werden soll. Zusätzlich habe ich als Demo mal noch einen Konfigurationsswitch eingebaut.

Captnemo 8. Mai 2015 18:16

AW: Einen REST-Server mit Delphi/CPP Builder erstellen?
 
Danke Jaenicke und Sir Rufo.
Man lernt immer wieder was dazu. Ich hatte mir das ganze um einiges komplizierter vorgestellt, aber wenn ich die Beispiele lese ist es ja doch ganz simpel.

Kommt mir auch sehr gelegen, da ich eh grad an einem Service rumstricke, und mir schon Gedanken über ein Konfigurationsprogramm gemacht habe. Das kann ich mir jetzt sparen und gleich mit in die Exe packen, was nicht nur eleganter aussieht, sondern auch die Notwendigkeit beinhaltet, dass der Dienst zur Übernahme der Konfiguration eh neu gestartet werden müsste.

jaenicke 8. Mai 2015 18:48

AW: Einen REST-Server mit Delphi/CPP Builder erstellen?
 
Vor allem kann man den Dienst so auch steuern, wenn man ihn als Exe normal aufruft. (In der Demo steckt noch mehr als hier als Quelltext gepostet ist, falls das jemand sonst nicht ausprobiert. ;-)) Außerdem habe ich in einem unserer echten Dienste im Büro auch gleich Eingabefelder für Name und Anzeigename des Dienstes für dessen Installation und Statusprüfung eingebaut, was man sonst ja nicht so einfach einstellen kann.

jaenicke 2. Dez 2015 21:58

AW: Einen REST-Server mit Delphi/CPP Builder erstellen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe per PN die Nachricht bekommen, dass in dem Download noch Units fehlen. Hier der korrigierte Download, in dem diese Units nicht benötigt werden.

sh17 3. Dez 2015 10:22

AW: Einen REST-Server mit Delphi/CPP Builder erstellen?
 
ahh. genial, danke @jaenicke

sh17 10. Dez 2015 15:52

AW: Einen REST-Server mit Delphi/CPP Builder erstellen?
 
Angenommen es geht was bei Initialisierung des Prozesses schief (Datenbank nicht erreichbar, Ports belegt, etc), wie geht Ihr da vor? Last Ihr den Prozess am Leben und protokolliert das ganze oder Prozess beenden mit Application.Terminate und vor dem .Run rausspringen?

jaenicke 14. Dez 2015 04:14

AW: Einen REST-Server mit Delphi/CPP Builder erstellen?
 
Das wichtigste ist natürlich das zu loggen. Bei einem Dienst auch im System-Eventlog.

Dann würde ich bei einem Dienst per Datasnap auch eine Statuswebseite anbieten. Dort kann dann der Fehler im Detail stehen und auf der Startseite der verlinkte Hinweis, dass der Dienst nicht initialisiert werden konnte.

Bei einer normalen Anwendung sehe ich im Normalfall keinen Grund diese normal zu starten, aber wenn diese wie im Beispiel den Dienst steuert, würde ich diese trotzdem starten, ggf. direkt mit einem speziellen Fenster dafür.

Der schöne Günther 26. Jan 2016 19:30

AW: Einen REST-Server mit Delphi/CPP Builder erstellen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hinweis am Rande: Am 2. bzw. 4. Februar macht Embarcadero einen Skill Sprint zu "Developing REST Servers from scratch"

https://www.embarcadero.com/landing-pages/skill-sprints

TiGü 31. Aug 2016 15:14

AW: Einen REST-Server mit Delphi/CPP Builder erstellen?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1296712)
Zitat:

Zitat von Lemmy (Beitrag 1296588)
TidHttpServer in einen Dienst packen und gut ist

Nach Rufos Vorschlag einfach mal angefangen und ja- da steckt wohl wirklich nichts dahinter. HTTP GET und gut ist. Das werde ich wohl so machen. :thumb:

Wie hast du das Problem letztendlich gelöst?
Ich stehe vor einer ähnlichen Aufgabe und bin irgendwie auf dem gedanklichen Holzweg, wenn es darum geht die eigene Applikation auf REST-Befehle responsiv zu gestalten.

Der schöne Günther 31. Aug 2016 15:49

AW: Einen REST-Server mit Delphi/CPP Builder erstellen?
 
Ganz billig. Wenn du ein, zwei Tage warten kannst such ich das nochmal heraus. Im Endeffekt war es einfach nur auf den HTTP-GET-String geschaut, eine dazu passende Behandler-Methode aufgerufen und die über HTTP übergebenen Params (sowie die Rückgaben) waren halt Json-Objekte. Mehr habe ich nicht gebraucht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 Uhr.
Seite 3 von 5     123 45      

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