Laden...

Rainbird's Zyan: Interne Nutzerverwaltung, Logon, Logoff

Erstellt von rimiko vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.765 Views
R
rimiko Themenstarter:in
4 Beiträge seit 2011
vor 12 Jahren
Rainbird's Zyan: Interne Nutzerverwaltung, Logon, Logoff

Hallo Community

Ich arbeite derzeit an einem Testprojekt in Form einer verteilten Anwendung(Applikationsserver und Client). Dabei möchte ich gerne das Zyan.Communication – Framework nutzen und habe gleich meine erste Frage dazu.

Beschreibung:
Ich führe aus unterschiedlichen Gründen die Daten der berechtigten Nutzer in einer SQL-Datenbank und verwende daher eine eigene AuthProvider-Klasse (Implementiert die Schnittstelle IAuthenticationProvider) zur Authentifizierung der Nutzer. So weit, so gut…

Jetzt möchte ich aber auf dem Applikationsserver eine interne Liste der momentan angemeldeten Nutzer und der dazugehörigen Rollenberechtigungen (Informationen sind ebenfalls in der SQL-Datenbank hinterlegt) führen.

Eine Möglichkeit wäre jetzt – nach erfolgreicher Authentifizierung – aus der AuthProvider-Klasse heraus die besagte Nutzerliste zu befüllen.

Frage:
Wie / Wo müsste ich denn eine Logoff-Methode implementieren, sodass spätestens beim Schliessen der Anwendung durch den Nutzer, die Informationen über diesen wieder aus der Liste der angemeldeten Nutzer auf dem Server gelöscht werden?

Danke für eure Hilfe / Unterstützung

3.728 Beiträge seit 2005
vor 12 Jahren
Logoff mitkriegen

Hallo rimiko,

es gibt momentan noch kein Event, um sich an zentraler Stelle über einen Logoff informieren zu lassen.

Du kannst es aber in einem benutzerdefinierten SessionManager implementieren. Dazu musst Du Zyan.Communication.SessionMgmt.ISessionManager implementieren. Wenn sich ein Client abmeldet, wird von der Zyan-Infrastruktur die Methode "RemoveSession" aufgerufen.

Am einfachsten kopierst Du Dir den Quellcode des Standard-SessionManager (Klasse Zyan.Communication.SessionMgmt.InProcSessionManager) in eine eigene SessionManager-Klasse und baust ihn nach Deinen eigenen Wünschen um. Deinen eigenen SessionManager musst Du dem Konstruktur des ZyanComponentHost-Objekts als Parameter mitgeben.

Ich werde ein Logoff und Logon Event nachrüsten. Kann aber ein bischen dauern. Trotzdem ist der SessionManager der richtige Ort für solche Anpassungen.

Gruß

Rainbird

R
rimiko Themenstarter:in
4 Beiträge seit 2011
vor 12 Jahren

Hallo Rainbird,

obwohl ich mir eine notdürftige Lösung gebastelt hatte, wollte ich dennoch das von Dir vorgeschlagene Konzept umsetzen und muss sagen, dass das so sehr viel eleganter ist und auch funktioniert. Danke!

Gruß,
rimiko

Off-Topic:
Seit dem ich mich mit verteilten Anwendungen und Netzwerkkommunikation beschäftige, sind mir Deine Beispielprogramme und Forenbeiträge stets eine große Wissens- und Lernquelle.

Ich kann zwar nur für mich sprechen, aber ich denke, ich bin da nicht allein, wenn ich Dir dafür ein herzliches "Danke" sage.

3.728 Beiträge seit 2005
vor 12 Jahren
ClientLoggedOn / ClientLoggedOff

Hallo rimiko,

freut mich, dass Dir meine Arbeit nützlich ist.

Ich habe eine neue Zyan-Version eingecheckt. Du kannst Dir den aktualisierten Quellcode unter http://zyan.codeplex.com/SourceControl/list/changesets runterladen.

Die Klasse ZyanComponentHost hat nun zwei neue Ereignisse namens ClientLoggedOn und ClientLoggedOff. Außerdem kannst Du nun über ServerSession.CurrentSession.ClientAddress auch die Client-IP-Adresse abfragen.
Ich habe das MiniChat um die neuen Features erweitert (Liegt im Repository unter examples\Zyan.Examples.MiniChat

Gruß

Rainbird

R
rimiko Themenstarter:in
4 Beiträge seit 2011
vor 12 Jahren

Hallo Rainbird,

da ich einige Tage verreist war, kommt meine Antwort etwas verspätet.

Ich werde sofort den aktualisierten Quellcode herunterladen, mir die neuen Features ansehen und umsetzen. Melde mich dann zu einem späteren Zeitpunkt mit Feedback.

Vorab aber schon mal vielen Dank für Deine Arbeit und Unterstützung.

Gruß,

rimiko

R
rimiko Themenstarter:in
4 Beiträge seit 2011
vor 12 Jahren

Hallo Rainbird,

die neuen Änderungen an Deinem Framework finde ich toll und sehr hilfreich.
Bezogen auf mein Projekt spart mir das die eigene SessionManager-Klasse.

Ein Frage hätte ich allerdings:
Wäre es nicht besser in den LoginEventArgs des ClientLoggedOff-Ereignisses die aktuelle Systemzeit anstelle von Session.Timestamp (beinhaltet den Zeitpunkt der Anmeldung) zu übermitteln?

Gruß,
rimiko

3.728 Beiträge seit 2005
vor 12 Jahren

Wäre es nicht besser in den LoginEventArgs des ClientLoggedOff-Ereignisses die aktuelle Systemzeit anstelle von Session.Timestamp (beinhaltet den Zeitpunkt der Anmeldung) zu übermitteln?

Ich möchte an der Stelle alle wichtigen Daten der Session haben. Dazu gehört aus der Zeitstempel der letzten Sitzungsverlängerung.

Aber die aktuelle Serverzeit beim auftreteten des Events könnte ich zusätzlich noch mitschicken.

A
350 Beiträge seit 2010
vor 12 Jahren

Wobei dass ja unnötig wäre, bei einem Logoff Event kriegt der Server ja mit wann es passiert durch zB DateTime.Now direkt im Event.

3.728 Beiträge seit 2005
vor 12 Jahren
Zeit übergeben

Das war auch mein erster Gedanke. Im Prinzip ist es wirklich nicht wichtig den Zeitpunkt des Ab/Anmeldens in den EventArgs mitzugeben, da zwischen Auftreten des Events und Behandlung des Events keine nennenswerte zeit vergeht.