Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Rainbird's Zyan: Interne Nutzerverwaltung, Logon, Logoff
rimiko
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

Rainbird's Zyan: Interne Nutzerverwaltung, Logon, Logoff

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Rainbird
myCSharp.de - Experte

Avatar #avatar-2834.jpg


Dabei seit:
Beiträge: 3953
Herkunft: Mauer

Logoff mitkriegen

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
rimiko
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Rainbird
myCSharp.de - Experte

Avatar #avatar-2834.jpg


Dabei seit:
Beiträge: 3953
Herkunft: Mauer

ClientLoggedOn / ClientLoggedOff

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
rimiko
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
rimiko
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Rainbird
myCSharp.de - Experte

Avatar #avatar-2834.jpg


Dabei seit:
Beiträge: 3953
Herkunft: Mauer

beantworten | zitieren | melden

Zitat von rimiko
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.
private Nachricht | Beiträge des Benutzers
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Rainbird
myCSharp.de - Experte

Avatar #avatar-2834.jpg


Dabei seit:
Beiträge: 3953
Herkunft: Mauer

Zeit übergeben

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers