AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke WebModule & ADOConnection in Service -> Speicherübrelauf
Thema durchsuchen
Ansicht
Themen-Optionen

WebModule & ADOConnection in Service -> Speicherübrelauf

Ein Thema von markusef · begonnen am 13. Jan 2017 · letzter Beitrag vom 19. Jan 2017
 
markusef

Registriert seit: 9. Mai 2016
15 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: WebModule & ADOConnection in Service -> Speicherübrelauf

  Alt 13. Jan 2017, 13:57
Okay, wieder was gelernt mit der ADOConnection.
Grundlegend und simpel gesagt will ich pro Action was aus der Datenbank holen, schick verpacken und als Response an den Client senden.
Also könnte ich demnach eine TADOQuery pro Action mit einem ConnectionString abfeuern ?

Desweiteren fiel mir auf das, sobald der REST Client eine Anfrage schickt, in der Klasse Webmodule in das WebModuleCreate gesprungen wird, allerdings nur bei der ersten Anfrage, bei allen weiteren nicht.
Sobald der REST Client fertig ist bleibt demnach (so vermute ich) die Instanz des Webmodules bestehen.
Destroy wird erst ausgelöst wenn ich den Service komplett schließe.

*nicht wundern, es ist erstmal nur ein Testaufbau, deshalb teilweise die sinnlosen Variablenbelegungen.

Code:

TWebModuleMain = class(TWebModule)
    //--------------------------------------------------------------------------
    //Webservice für HTTP Requests
    //--------------------------------------------------------------------------
    //Default Web Handler, liefert HTML Rumpf für "ungewöhnliche" Anfragen
    procedure WebModule3DefaultHandlerAction   ( Sender: TObject;
                                                  Request: TWebRequest;
                                                  Response: TWebResponse;
                                                  var Handled: Boolean);

    //Webhandler für Requests
    procedure WebModuleMaintcmAction           ( Sender: TObject;
                                                  Request: TWebRequest;
                                                  Response: TWebResponse;
                                                  var Handled: Boolean);

    procedure WebModuleCreate(Sender: TObject);
    procedure WebModuleDestroy(Sender: TObject);

  private
    { Private-Deklarationen }

    procedure getNothing       ( Request: TWebRequest; Response: TWebResponse); //test für memory leak
    procedure send501(text : String);

  public
    { Public-Deklarationen }
  end;

var
  WebModuleClass : TComponentClass = TWebModuleMain;


implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

//Default path (no path infos, only url + port)
procedure TWebModuleMain.WebModule3DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  Response.Content :=
    '<html>' +
    '<head><title>Webserver-Anwendung</title></head>' +
    '<body>Test Webservice'+
    '</body>' +
    '</html>';
end;

procedure TWebModuleMain.WebModuleCreate(Sender: TObject);
var
  test : STring;
begin
  test := 'abcdef';
end;

procedure TWebModuleMain.WebModuleDestroy(Sender: TObject);
var
  Test : String;
begin
  Test := 'abcerf';
end;

procedure TWebModuleMain.WebModuleMaintcmAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  Handled := true;
  case Request.MethodType of
    mtGet:     tcmGet( Request, Response );
    mtPut:     send501('this function was not implemented');
    mtPost:    send501('this function was not implemented');
    mtDelete:  send501('this function was not implemented');
    else begin
      send501('this function was not implemented');
    end;
  end;
end;

procedure TWebModuleMain.getNothing(Request: TWebRequest;
  Response: TWebResponse);
var
  tst : String;
  ADOConnection : TADOConnection;
  ADOQuery     : TADOQuery;
begin
  try
    CoInitialize(nil);
    ADOConnection := TADOConnection.Create(nil);
    ADOConnection.ConnectionString := 'Provider=MSDASQL.1;Password=CASS2HAR;Persist Security Info=True;User ID=ADMIN;Data Source=MaxDb_GOLD1';
    ADOQuery := TADOQuery.Create(nil);
    ADOQuery.Connection := ADOConnection;

    ADOConnection.Connected := true;

    ADOQuery.SQL.Text := 'SELECT Name, Age FROM customer WHERE id=1';

    ADOQuery.Open;
    ADOQuery.First;

    tst := tst + ADOQuery.FieldByName('name').AsString;
    Response.StatusCode := 200;
    Response.Content := tst;
  finally
    FreeAndNil(ADOQuery);
    ADOConnection.Connected := false;
    FreeAndNil(ADOConnection);
    CoUninitialize;
  end;
end;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Help Classes
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


procedure TWebModuleMain.tcmGet(Request: TWebRequest;
  Response: TWebResponse);
begin
  if not Request.QueryFields.Values['action'].IsEmpty then
  begin
    if Request.QueryFields.Values['action'] = 'getnothing' then
    begin
      getNothing(Request, Response);
    end;

´   //Mehr Actionhandling..
  end;
end;

procedure TWebModuleMain.send501(text : String);
begin
  Response.StatusCode := 501;
  Response.ContentType := 'text/plain';
  Response.Content := text;
  Response.SendResponse;
end;

end.
Markus

Geändert von markusef (13. Jan 2017 um 13:59 Uhr)
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz