Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Login Webservice Delphi (https://www.delphipraxis.net/204856-login-webservice-delphi.html)

RomeoAnfänger 8. Jul 2020 06:51

Login Webservice Delphi
 
Hallo,
ich habe den Login Code Webservice für eine Mobil App implementiert und beim Ausführen ,reagiert den Code überhaupt nicht .Ich benutze NexusDB Datenbank Server und von der App die eingegeben Benutzername und Passwort sollen mit den Benutzernamen und Passwörtern von NexusDB vergleichen und wenn die Daten identisch sind ,dann bekommt der Appsuser eine Nachricht (Erfolgreich eingeloggt ) und dann öffnet sich eine neue Seite .Ich weiß nicht ,was ich falsch gemacht habe ? Könnte ihr mir helfen ? Wer das Problem löst ,krieg von mir eine volle Bierkiste.
Danke für ihre Hilfe .

var
Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);

begin
try
nxQuery1.SQL.Text:='select * from Mitarbeiter where Benutzername=: p1 and Passwort=: p2';
nxQuery1.Params.ParamByName('p1').Value := edit1.Text;
nxQuery1.Params.ParamByName('p2').Value := edit2.Text;
nxQuery1.ExecSQL;

nxQuery1.Open;
if (Edit1.Text = nxQuery1.FieldByName('Benutzername').AsString) and
(Edit2.Text = nxTable1.FieldByName('Passwort').AsString)
then
begin
GroupBox1.Visible:= false;
//SaveTimeClient.Show;//Funktioniert auch nicht .Deshalb habe ich es auskommentiert. Hier wir das Hauptmenu //geöffnet ,wenn der User richtig eingellogt wird ,d.h der User hat zugrifft auf den Server auch .
//Webservices_Login_Server.Hide;// Hier wird die Seite Login versteckt oder nicht angezeigt.

end;
except
else showmessage ('Ungültiger Benutzername oder Passwort !');

end;

end.

DeddyH 8. Jul 2020 07:07

AW: Login Webservice Delphi
 
Wo wird der Code denn ausgeführt, auf dem Server oder in der App? Wie dem auch sei, ich verstehe das Doppelmoppel eh nicht und würde das eher so machen:
Delphi-Quellcode:
nxQuery1.SQL.Text:='select * from Mitarbeiter where Benutzername=: p1 and Passwort=: p2';
nxQuery1.Params.ParamByName('p1').AsString := edit1.Text;
nxQuery1.Params.ParamByName('p2').AsString := edit2.Text;
nxQuery1.Open;
// Eof -> Kein entsprechender Datensatz gefunden, Anmeldung ungültig
if nxQuery1.Eof then
  Showmessage ('Ungültiger Benutzername oder Passwort !')
else
  GroupBox1.Visible:= false;
nxQuery1.Close;

RomeoAnfänger 8. Jul 2020 10:30

AW: Login Webservice Delphi
 
Zitat:

Zitat von DeddyH (Beitrag 1469055)
Wo wird der Code denn ausgeführt, auf dem Server oder in der App? Wie dem auch sei, ich verstehe das Doppelmoppel eh nicht und würde das eher so machen:
Delphi-Quellcode:
nxQuery1.SQL.Text:='select * from Mitarbeiter where Benutzername=: p1 and Passwort=: p2';
nxQuery1.Params.ParamByName('p1').AsString := edit1.Text;
nxQuery1.Params.ParamByName('p2').AsString := edit2.Text;
nxQuery1.Open;
// Eof -> Kein entsprechender Datensatz gefunden, Anmeldung ungültig
if nxQuery1.Eof then
  Showmessage ('Ungültiger Benutzername oder Passwort !')
else
  GroupBox1.Visible:= false;
nxQuery1.Close;

Der Code wird auf dem Server ausgeführt .Okay Danke für deine Korrektur.Ich werde den Code ändern und gucken ,ob es klappt :):-D

DeddyH 8. Jul 2020 10:41

AW: Login Webservice Delphi
 
Oh, ich sehe gerade: zwischen dem Doppelpunkt und dem eigentlichen Bezeichner des Parameters im SQL-String darf kein Leerzeichen stehen. Es muss also heißen
Delphi-Quellcode:
nxQuery1.SQL.Text:='select * from Mitarbeiter where Benutzername=:p1 and Passwort=:p2';

RomeoAnfänger 8. Jul 2020 11:28

AW: Login Webservice Delphi
 
Zitat:

Zitat von DeddyH (Beitrag 1469055)
Wo wird der Code denn ausgeführt, auf dem Server oder in der App? Wie dem auch sei, ich verstehe das Doppelmoppel eh nicht und würde das eher so machen:
Delphi-Quellcode:
nxQuery1.SQL.Text:='select * from Mitarbeiter where Benutzername=: p1 and Passwort=: p2';
nxQuery1.Params.ParamByName('p1').AsString := edit1.Text;
nxQuery1.Params.ParamByName('p2').AsString := edit2.Text;
nxQuery1.Open;
// Eof -> Kein entsprechender Datensatz gefunden, Anmeldung ungültig
if nxQuery1.Eof then
  Showmessage ('Ungültiger Benutzername oder Passwort !')
else
  GroupBox1.Visible:= false;
nxQuery1.Close;

Dein Code ist richtig ,aber mein Login webservice wird nicht ausgefürt . Ich vermute,das Problem kommt wahrscheinlich von ''MyServiceImpl'' :

function TMyService.Zeitstempel(const Value: TDateTime): Boolean; stdcall;
begin
{ TODO : Methode Zeitstempel implementieren }
Result := true;
ShowMessage('Zeit:'+ FormatDateTime('dd.mm.yyyy',Value));

end;
//Die Funktion Login wird von dieser unten angenommen .
function TMyService.Login(const Benutzername , Passwort: String): String; stdcall;

begin
Result := true;
ShowMessage('Zeit:');
end;
______________________
Die Funktion Zeitstempel ist läuft immer ,wenn ich den Knopf 'Start' drücken und meine Funktion Login nicht .Ich habe leider keine Ahnung ,wie ich den Code in dieser Funktion schreiben kann .

RomeoAnfänger 8. Jul 2020 11:31

AW: Login Webservice Delphi
 
Zitat:

Zitat von DeddyH (Beitrag 1469073)
Oh, ich sehe gerade: zwischen dem Doppelpunkt und dem eigentlichen Bezeichner des Parameters im SQL-String darf kein Leerzeichen stehen. Es muss also heißen
Delphi-Quellcode:
nxQuery1.SQL.Text:='select * from Mitarbeiter where Benutzername=:p1 and Passwort=:p2';

Ach so . ich korrigiere den Fehler sofort und gebe dir dann auch Bescheid


ich habe mir noch einmal alles angeschaut und ich definitiv sicher,dass das Problem wahrscheinlich von
''MyServiceImpl'' kommt :

function TMyService.Zeitstempel(const Value: TDateTime): Boolean; stdcall;
begin
{ TODO : Methode Zeitstempel implementieren }
Result := true;
ShowMessage('Zeit:'+ FormatDateTime('dd.mm.yyyy',Value));

end;
//Die Funktion Login wird von dieser unten angenommen .
function TMyService.Login(const Benutzername , Passwort: String): String; stdcall;

begin
Result := true;
ShowMessage('Zeit:');
end;
______________________
Die Funktion Zeitstempel ist läuft immer ,wenn ich den Knopf 'Start' drücken und meine Funktion Login nicht .Ich habe leider keine Ahnung ,wie ich den Code in dieser Funktion schreiben kann .

TurboMagic 8. Jul 2020 21:05

AW: Login Webservice Delphi
 
Ich glaube auch, dass das ExecSQL fehl am Platz war/ist. Ich denke das wäre für SQL Statements zu nutzen die nichts zurückliefern wie Insert, Delete und Update.

Für Statements wie Select die eine Ergebnismenge zurückliefern ist das Open das richtige.

RomeoAnfänger 9. Jul 2020 21:26

AW: Login Webservice Delphi
 
Zitat:

Zitat von TurboMagic (Beitrag 1469151)
Ich glaube auch, dass das ExecSQL fehl am Platz war/ist. Ich denke das wäre für SQL Statements zu nutzen die nichts zurückliefern wie Insert, Delete und Update.

Für Statements wie Select die eine Ergebnismenge zurückliefern ist das Open das richtige.


ich habe auch ExecSQL hingefügt und es sieht so aus jetzt.
begin

nxQuery1.SQL.Text:='select * from Mitarbeiter where Benutzername=:p1 and Passwort=:p2';
nxQuery1.Params.ParamByName('p1').Value := edit1.Text;
nxQuery1.Params.ParamByName('p2').Value := edit2.Text;
nxQuery1.Open;
nxQuery1.ExecSQL;
if nxQuery1.Eof then
Showmessage ('Ungültiger Benutzername oder Passwort !')
else
GroupBox1.Visible:= false;
nxQuery1.Close;

end;

end.

Aber wie gesagt , das Problem kommt von meinem 'MyServiceImpl'.Da habe ich keinen Code für das Web service und weiß nicht genau wiw ich es für die Funktion-Login implementieren kann .
Vielleicht kann mir Jemanden da helfen :
//Die Funktion Authentifizierung wird von dieser unten angenommen .
function TMyService.Authentifizierung(const Benutzername , Passwort: String): String; stdcall;

begin

// schauen ,ob der Benutzer schon eingeloggt ist

ShowMessage('');
end;

ConstantGardener 9. Jul 2020 21:58

AW: Login Webservice Delphi
 
...das ExecSQL ist überflüssig! Das open öffnet die Tabelle und man kann dann mit den Daten arbeiten.

Davon mal ab verstehe ich nicht so wirklich was du da machst. Wenn das Programm auf dem Server läuft und du ShowMessage benutzt wird das auch auf dem Server ausgegeben, nicht auf dem Client.

Rolf Frei 10. Jul 2020 13:41

AW: Login Webservice Delphi
 
Ich habe den Eindruck du machst auf den Server ein normales Delphi Programm mit GUI Elementen. Das kann und wird so nie funktionieren. Mach eine WebBroker Anwendung die du dann per IIS nutzt. Für so was Simples würde ich eine CGI-Exe erstellen, die dann viel einfacher zu administrieren ist als eine ISAPI-DLL. Wenn du kein IIS auf dem Server hast, kanst du auch eine WebBroker Webserveranwendung erstellen. Diese enthält dann die nötigen Webserverfunktionen, für die normalerweise IIS zuständig ist, allerdings nur sehr "primitiv".

Allfällige Fehler und Antworten musst du dann als HTML-Code retour geben. Du darfst da keine Formen und Dialoge nutzen, da das so zu einer "hängenden" Webabfrage führt, die dann irgendwann mit eine Timeout retour kommt. Schliesslich sitzt niemand am Server und beantwortet die Dialoge. Exception werden auch als Webantworten mit Statuscode 500 an den Browser/dein Client zurückgeschickt.

Das geht mit dem Delphi WebBroker Framework super einfach und ist für deine Aufgabe die einfachste und beste Lösung. Lies dir da mal die Doku dazu durch, wenn du Delphi Webbroker noch nie genutzt hast.

RomeoAnfänger 11. Jul 2020 10:53

AW: Login Webservice Delphi
 
Zitat:

Zitat von ConstantGardener (Beitrag 1469251)
...das ExecSQL ist überflüssig! Das open öffnet die Tabelle und man kann dann mit den Daten arbeiten.

Davon mal ab verstehe ich nicht so wirklich was du da machst. Wenn das Programm auf dem Server läuft und du ShowMessage benutzt wird das auch auf dem Server ausgegeben, nicht auf dem Client.

Sorry ,aber ich habe meine Frage falsch formuliert und gestellt :(.Mein Ziel Mit ExecSQL ist ,ich möchte die Query ausführen und es soll dann in einer NexusDB Tabelle reingehen und die Daten von Tabelle mit den Daten (Benutzername und Passwort) vergleichen und Zugriff auf dem Server geben.Das ShowMessage und das Programm sind im Unit Login.pas (wo ich den Code geschrieben habe) und Login.pas befindet sich in Client.exe von Delphi.Der Server läuft unabhängig von dem Client und umgekehrt.Und ich möchte eigentlich das Programm Login.pas auf dem Client ausführen und das Programm ist gut ,aber funktionniert nicht .Das ist mein Problem jetzt .

Olli73 11. Jul 2020 11:05

AW: Login Webservice Delphi
 
Was du vorhast geht so nicht!

Du musst eine Anfrage mit Name und Passwort vom Client aus an den Server schicken, der prüft dann, ob der User (mit korrektem Passwort) in der Datenbank vorkommt und gibt dem Client eine Antwort auf die Anfrage.

RomeoAnfänger 11. Jul 2020 15:45

AW: Login Webservice Delphi
 
Zitat:

Zitat von Olli73 (Beitrag 1469349)
Was du vorhast geht so nicht!

Du musst eine Anfrage mit Name und Passwort vom Client aus an den Server schicken, der prüft dann, ob der User (mit korrektem Passwort) in der Datenbank vorkommt und gibt dem Client eine Antwort auf die Anfrage.

Guck mal l, was ich gebastelt habe . Ihc habe es heute noch ausgeführt und ich kriege keine Interface ausgabe ,nur das Interface von Zeitstempel .Sag mal ,kann man mehrere Webservices gleichzeitig laufen kriegen und auf dem selbem Client implementieren ?

//Die Funktion Login wird von dieser unten angenommen .
function TMyService.Login(const Benutzername ,Passwort: String): Boolean;

begin
result := True;
if (CompareText (Benutzername,'Romeo')<> 0) or (Passwort <>'test') then
begin
Result := False;
Exit;
ShowMessage ('Ungültiger Benutzername oder Passwort !')
end;
end;

RomeoAnfänger 12. Jul 2020 11:52

AW: Login Webservice Delphi
 
Zitat:

Zitat von Rolf Frei (Beitrag 1469301)
Ich habe den Eindruck du machst auf den Server ein normales Delphi Programm mit GUI Elementen. Das kann und wird so nie funktionieren. Mach eine WebBroker Anwendung die du dann per IIS nutzt. Für so was Simples würde ich eine CGI-Exe erstellen, die dann viel einfacher zu administrieren ist als eine ISAPI-DLL. Wenn du kein IIS auf dem Server hast, kanst du auch eine WebBroker Webserveranwendung erstellen. Diese enthält dann die nötigen Webserverfunktionen, für die normalerweise IIS zuständig ist, allerdings nur sehr "primitiv".

Allfällige Fehler und Antworten musst du dann als HTML-Code retour geben. Du darfst da keine Formen und Dialoge nutzen, da das so zu einer "hängenden" Webabfrage führt, die dann irgendwann mit eine Timeout retour kommt. Schliesslich sitzt niemand am Server und beantwortet die Dialoge. Exception werden auch als Webantworten mit Statuscode 500 an den Browser/dein Client zurückgeschickt.

Das geht mit dem Delphi WebBroker Framework super einfach und ist für deine Aufgabe die einfachste und beste Lösung. Lies dir da mal die Doku dazu durch, wenn du Delphi Webbroker noch nie genutzt hast.

Ich habe SOAP Server verwendet und als Database nutze ich NexusDB Server.Hier mache ich die Implementierung für eine MobileApp und glaube,HTML-code ist dann bei uns nicht verwendet.

Mein Client ist hier die App ,das heißt die App soll auf iOS und Android laufen können.

Weißt du ,wie sollen die Webservices auf dem Client.exe laufen ?Ich meine ,ich habe in meinem Fall 4 Webservices und wie kann ich sie laufen kriegen?Laufen sie nacheinander oder gibt es eine Möglichkeit sie alle
gleichzeitig auszuführen ?

Rolf Frei 15. Jul 2020 13:15

AW: Login Webservice Delphi
 
Ich denke du hast die Funktionsweise von SOAP noch nicht verstanden. SOAP ist nichts anderes als speziell formatierte XML Anfragen an einen Webserver. Der Webserver muss darauf antworten, also in deinem Fall müsstest du eine CGI-Exe oder eine ISAPI-DLL machen, die mehere SOAP Services unterstützen kann.

Allfällige Fehelremeldungen etc. darfst du nicht wie in einem GUI Programm retour melden (ShowMessage ist Tabu in einer Webanwendung). Es drügfen also keine GUI-Meldungen erscheinen. Ausserdem solltest du die Forms + Dialogs unit aus deinem Projekt verbannen. Daraus darfst du in einer Webapplikation nichts nutzen.

Für deinen Fall müsstest du eine SOAP-Anfrage für das Login machen in der du z.B. den Fehler als Ausgabeparameter zurücklieferst oder einfach eine Exception mit deinem Fehlertext auslöst. Dieser sollte dann automatisch an den Client als Exception geliefert werden.

Leider ist mir immer noch nicht ganz klar wie du den Server erstellst hast? Hast du da eine normale Delphi Anwendung gemacht (mit Formen) oder eine SOAP-Server Applicaiton (Delphi - New - Other... - Delphi/Web - SOAP-Server Applicaiton). Da hast du dann die 3 Möglichkeiten des Typs zu wählen (ISAPI, CGI, Eigenständige Webappserver). Mein Tipp ist hier CGI oder ISAPI, wenn dein Server über IIS verfügt, ansonsten eine eingenständige Exe. Den IIS musst du gegebenfalls noch etwas umkonfigurieren, damit du CGI/ISAPI nutzen kannst.

RomeoAnfänger 16. Jul 2020 12:20

AW: Login Webservice Delphi
 
Zitat:

Zitat von Rolf Frei (Beitrag 1469644)
Ich denke du hast die Funktionsweise von SOAP noch nicht verstanden. SOAP ist nichts anderes als speziell formatierte XML Anfragen an einen Webserver. Der Webserver muss darauf antworten, also in deinem Fall müsstest du eine CGI-Exe oder eine ISAPI-DLL machen, die mehere SOAP Services unterstützen kann.

Allfällige Fehelremeldungen etc. darfst du nicht wie in einem GUI Programm retour melden (ShowMessage ist Tabu in einer Webanwendung). Es drügfen also keine GUI-Meldungen erscheinen. Ausserdem solltest du die Forms + Dialogs unit aus deinem Projekt verbannen. Daraus darfst du in einer Webapplikation nichts nutzen.

Für deinen Fall müsstest du eine SOAP-Anfrage für das Login machen in der du z.B. den Fehler als Ausgabeparameter zurücklieferst oder einfach eine Exception mit deinem Fehlertext auslöst. Dieser sollte dann automatisch an den Client als Exception geliefert werden.

Leider ist mir immer noch nicht ganz klar wie du den Server erstellst hast? Hast du da eine normale Delphi Anwendung gemacht (mit Formen) oder eine SOAP-Server Applicaiton (Delphi - New - Other... - Delphi/Web - SOAP-Server Applicaiton). Da hast du dann die 3 Möglichkeiten des Typs zu wählen (ISAPI, CGI, Eigenständige Webappserver). Mein Tipp ist hier CGI oder ISAPI, wenn dein Server über IIS verfügt, ansonsten eine eingenständige Exe. Den IIS musst du gegebenfalls noch etwas umkonfigurieren, damit du CGI/ISAPI nutzen kannst.

Ich habe ein SOAP-Server Application für die Erstellung des Servers verwendet.Und ich möchte ISAPI dann verwenden.IIS ist auch schon umkonfiguriert .


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 Uhr.

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