AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken DataSnap von der Session auf den Channel oder der TCPConnection kommen
Thema durchsuchen
Ansicht
Themen-Optionen

DataSnap von der Session auf den Channel oder der TCPConnection kommen

Ein Thema von Kostas · begonnen am 30. Mär 2015 · letzter Beitrag vom 31. Mär 2015
Antwort Antwort
Seite 1 von 2  1 2      
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

DataSnap von der Session auf den Channel oder der TCPConnection kommen

  Alt 30. Mär 2015, 16:51
Datenbank: Firebird • Version: 2.5 • Zugriff über: DataSnap
Hallo Zusammen,

sobald ein User sich mit dem DataSnap Server verbindet, wird ein TIdTCPConnection und ein TDSTCPChannel Object angelegt.

Ziemlich gleich erzeugt der DataSnapServer ein TDSSession Object.
Es wurde ein Event Registriert und somit bekomme ich das mit.

Delphi-Quellcode:
procedure TfrMain.AddSessionListener;
begin
  //Add a session listener, which will be notified when a session is created or closed.
  TDSSessionManager.Instance.AddSessionEvent(
    procedure(Sender: TObject;
              const EventType: TDSSessionEventType;
              const Session: TDSSession)
    begin
      //the application is in an invalid or terminating state, so ignore the event.
      if FConnections = nil then
        Exit;

      //update the session Id list box
      AddOrRemoveSession(Session.SessionName, EventType = SessionCreate);

    end);

end;
An dieser Stelle habe ich alles was ich benötige.
Jetzt würde ich gerne die drei Objekte TIdTCPConnection, TDSTCPChannel und TDSSession
in einer eigenen Klasse verwalten. Ich habe keine Möglichkeit gefunden wie ich vom TDSSession Object
auf eines der beiden Objekte kommen könnte.

Hat jemand eine Idee?

Gruß Kostas

Geändert von Kostas (30. Mär 2015 um 20:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: DataSnap von der Session auf den Cannel oder der TCPConnection kommen

  Alt 30. Mär 2015, 16:58
Wenn du alle drei Instanzen hast, dann pack die doch in eine Klasse und merk dir die in einem Dictionary wo die Session der Key ist
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: DataSnap von der Session auf den Channel oder der TCPConnection kommen

  Alt 30. Mär 2015, 17:03
Hallo,

genau das habe ich vor. Das Problem ist, der Event für eine neue Session wird irgend wann gefeuert
und ich finde keine Referenz zu dem Channel oder der Connection.
Wenn der Event feuert weis ich nicht zu welcher Connection oder Channel dieser gehört.
Sicherlich ist die Session mit der Connection verbunden do genau das ist die Frage, wie komme ich zur Connection oder dem Channel?

Gruß Kostas

Geändert von Kostas (30. Mär 2015 um 20:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#4

AW: DataSnap von der Session auf den Cannel oder der TCPConnection kommen

  Alt 30. Mär 2015, 17:19
Ich vermute mal, du hast irgendwo eine TDSTCPServerTransport-Instanz, die für die TCP-Kommunikation zuständig ist. Diese hat wiederum ein OnConnect und ein OnDisconnect.

Beim OnConnect hat der Event-Parameter sowohl den Channel als auch die Connection (allerdings nur als TObject). Über den Channel bekommst du die SessionId, mit der du den SessionManager nach der Session befragen kannst.

Beim OnDisconnect bekommst du im Event-Parameter allerdings nur noch die Connection, aber dann ist der Channel wohl eh schon zu. Insofern ist das Abspeichern dieser Instanzen auch nicht ganz ungefährlich.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: DataSnap von der Session auf den Cannel oder der TCPConnection kommen

  Alt 30. Mär 2015, 17:27
Hallo Uwe,

zum Zeitpunkt an dem der DSTCPServerTransport1ConnectEvent gefeuert wird, ist die Session ID leer.
An dieser Stelle schnappe ich mir die TCPConnection und den Channel, aber wie gesagt die SessionID
ist zu diesem Zeitpunkt noch nicht bekannt. Sie wird etwas später erzeugt. Danach kann ich
durchaus über den Channel die SessionID abrufen.

Wenn der Event für die Session gefeuer wird, würde ich gerne in Erfahrung bringen zu welchem Channel
oder Connection die Session gehört damit ich die SessionID zuordnen kann. Sicherlich geht es irgendwie.

Gruß Kostas

Geändert von Kostas (30. Mär 2015 um 20:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: DataSnap von der Session auf den Cannel oder der TCPConnection kommen

  Alt 30. Mär 2015, 17:33
AFAIK läuft doch jede Verbindung in einem eigenen Thread. Somit hätte man die ThreadID um die Informationen zusammenzuführen.

Aber wie Uwe schon sagt, man muss wegen der Referenzen aufpassen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

AW: DataSnap von der Session auf den Cannel oder der TCPConnection kommen

  Alt 30. Mär 2015, 17:39
Vielleicht solltest du mal sagen, welche Informationen du genau brauchst. Vielleicht musst du dazu gar nicht die Instanzen speichern.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: DataSnap von der Session auf den Cannel oder der TCPConnection kommen

  Alt 30. Mär 2015, 17:44
Sorry Uwe,


gemein ist, wenn der Event feuert für eine neue Session, ist die Session ID
über den Channel nicht erreichbar, eine Sekunde später kann ich über den Channel die SessionID abrufen.

Was ich damit erreichen will ist, im Session Object steckt der Username, Zeitpunkt und weitere Infos
der sich angemeldet hat.

Die hätte ich gerne im Zugriff.

Gruß Kostas

Geändert von Kostas (30. Mär 2015 um 20:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: DataSnap von der Session auf den Cannel oder der TCPConnection kommen

  Alt 30. Mär 2015, 17:47
Aber das Session-Object hast du doch?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#10

AW: DataSnap von der Session auf den Cannel oder der TCPConnection kommen

  Alt 30. Mär 2015, 17:54
Das Session-Objekt kannst du auch jederzeit (zumindest solange sie gültig ist) über TDSSessionManager.GetThreadSession abrufen. Das ist manchmal ganz praktisch, wenn man User-bezogene Daten innerhalb einer ServerMethode verwenden will.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:46 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