Profildaten applikationsübergreifend verfügbar machen? Wie?

DanyCode

Grünschnabel
Hallo,
habe folgende(s) Problem(e).

Ich habe mehrere ASP.NET Webanwendungen (Alle auf einem Webserver (noch)). An einer Anwendung erfolgt die Authentifizierung / Login, anschließend stehen dem Anwender mehrere Applikationen zur Auswahl, die er aber nicht parallel aufrufen kann, er ist also immer nur in einer Anwendung. Bei erfolgreicher Authentifizierung wird ein Profil generiert. Jetzt gilt es, dieses Profil an einem geeigneten Ort abzulegen und somit beginnen die Probleme.

Sessions funktionieren leider nicht, da die immer nur auf eine Webanwendung beschränkt sind und nicht über die Anwendungsdomänengrenzen hinaus zugreifbar sind.
Also habe ich mich für Cookies entschieden, diese sind mir aber nicht unzuverlässig genug, denn es kommt, vor dass in meiner Entwicklungsumgebung alles funktioniert und im Echtbetrieb (vom selben Client aus getestet) das Cookie nicht gespeichert wird. Zudem hat ein Cookie eine Grenze von 4096 Byte und es können max bis zu 10KB für das Profil nötig sein.

Webdienste möchte ich auch nicht verwenden, da die in unserer Umgebung nicht zulässig sind und Microsoft auch nicht wirklich davon überzeugt ist.

Es gibt da so eine MarshalByRefObject Klasse von der man erben kann um Daten über diese Grenzen hinaus zugreifbar zu machen.
Meine Frage ist konkret
Müssen meine Profildaten als Datei auf dem Server abgelegt werden wenn ich zwischen Webanwendungen darauf zugreifen möchte, oder kann ich diese als Hashtable im Thread laufen lassen und somit im Speicher des Servers?
Welche Möglichkeiten gibt es darüber hinaus?
Speicherung im Filesystem sagt mir auch nicht wirklich zu, da dies nicht so performant ist und bei JEDEM durchlaufen der global.asax einer Anwendung auf das Profil zugegriffen werden muss. (Timeout setzen und prüfen etc.)
Eine Speicherung des Profils im SQL Server fällt derzeit auch flach.

Am liebsten wäre mir eine Lösung, bei der das Profil im Arbeitsspeicher des Servers liegt.

Ach und was mir gerade noch einfällt, wie kann ich das Profil, bzw. den Speicherort hinterher eindeutig identifizieren wenn ich in einer anderen Applikation bin? Es ist in unserer Umgebung kein Auslesen der Anwenderkennung möglich.

Hat jemand einen Lösungsansatz?

Blöde Fragen, oder?!

Danke euch trotzdem schon einmal!

Gruß
DanyCode
 
Du könntest aus Deinen Profilroutinen ein Webservice machen, das Du in alle Anwendungen einbindest.

Nachbearbeitung: Habe gerade gesehen, dass Du keine Webdienste einsetzen willst, womit Du wahrscheinlich Webservices meinst. Der Grund ist mr allerdings nicht klar. Wir setzen sie bei uns ein, sie funktionieren super und lassen sich leicht (auch in nicht .Net-Entwicklungen) integrieren.
 
Zuletzt bearbeitet:
chironex hat gesagt.:
Du könntest aus Deinen Profilroutinen ein Webservice machen, das Du in alle Anwendungen einbindest.
DanyCode hat gesagt.:
Webdienste möchte ich auch nicht verwenden, da die in unserer Umgebung nicht zulässig sind
Aber was meintest du mit der Aussage, dass Microsoft nicht von ihnen uebrzeugt ist?


Back to Topic:
Meine erste Wahl waere da die Datenbank gewesen, faellt ja allerdings auch weg. Ist das Filesystem so unperfomant? Sind es soviele Daten, das es wirklich nicht reicht diese per XML auf der Platte zu serialisieren?

Sicher, du koenntest da mit .NET Remoting und MarshalByRefObject rumtricken, aber das waer meiner Meinung nach Overkill fuer einen so kleinen Task. Da wuerde ich wirklich das Filesystem vorziehen.

Ist es nicht einfach moeglich die beiden Anwendungen irgendwie als Subanwendungen in eine Ueberprojekt zu kriegen? Das waer ja wohl die einfachste Moeglichkeit..
 
jaja, hatte ich ja eh schon ausgebessert ;-)

Ob WebService oder .Net Remoting macht auch nicht den dramatischen Unterschied. Aus Gründen der Wiederverwendbarkeit auch in Java-Apps verwende ich halt eher die WebServices. Performancemäßig ist Remoting schon besser.

Vom Filesystem würde ich allerdings abraten, die Datenbank wäre sicher die feinste Lösung.
 
chironex hat gesagt.:
jaja, hatte ich ja eh schon ausgebessert ;-)

Ob WebService oder .Net Remoting macht auch nicht den dramatischen Unterschied. Aus Gründen der Wiederverwendbarkeit auch in Java-Apps verwende ich halt eher die WebServices. Performancemäßig ist Remoting schon besser.

Vom Filesystem würde ich allerdings abraten, die Datenbank wäre sicher die feinste Lösung.
Jop, sehe ich genauso mit den Webservices und Remoting. Nur wenn er halt keine Webservices benutzen kann.. Remoting war fuer mich persoenlich immer irgendwie nur eine "Notloesung", da der Code doch teilweise mit den ganzen Configs und Interface-Bereitstellungen recht "anstregend" zu schreiben war.

Du hast schon recht, je nach Datenmenge ist das mit dem Filesystem wirklich eine schlecht Loesung, wenns allerdings nicht viele Daten sind ist sicherlich das Einfachste :)
 
Stimmt, am einfachsten ist es sicher :)

Mich interessiert aber mehr, wie das mit Microsoft und den WebServices gemeint war. Habe gerade geschaut, aber im Internet nichts aussagekräftige zu diesem Thema gefunden.
 
Hallo,
erstmal vielen Dank für die vielen Antworten!

Wie das mit Microsoft gemeint war, also ich hatte das Vergnügen 14 Tage Microsoft München besuchen zu drüfen und an einem Projekt mitarbeiten zu dürfen. Immer wenn WebServices eine gute Lösung von den Teilnehmern zu seien schien, sagte einer der Microsoft Onkels, "Jaaa, kann man so machen, aber wir machen das besser so und so..." Irgendwie hinterließ das bei mir und den anderen Teilnehmern auch, den Eindruck als wenn die der WebService-Sache nicht 100%ig trauen würden. Wieso genau kann ich nicht sagen. Diese 14 Tage waren jedenfalls sehr gut und als die 14 Tage vorbei waren, war ich froh, dass ich noch wusste wie eine Select Case Anweisung geht ;-) Als ich dann zu Hause war und das ganze so eine Woche sacken ließ fielen die Groschen aber was MS uns da so alles gezeigt hat ;-). Aber egal, die WebServices dürfen aufgrund der Entscheidung eines IT Lenkungsausschusses bei uns im Hause sowieso nicht verwendet werden...

Was das Filesystem angeht:
Also es ist mit einer Dauerbelastung von ca 6.000 - 10.000 Usern zu rechnen, die bei JEDEM Seitenaufruf das Profil abgreifen müssen. Ich selber kann nicht sagen wie belastend das für den Server ist, deswegen habe ich diesen Lösungsansatz Filesystem erstmal hinten angestellt.

Jemand hatte den Vorschlag gemacht, die beiden Anwendungen in einer zu implementieren. Wenn es nur 2 wären, kein Thema, aber es sind derzeit schon 4 und es werden immer mehr.

Da das Remoting wirklich nicht ganz so einfach zu sein scheint und ich darüber hinaus nicht weiß wie belastend das für den Server ist, werde ich wohl eine DB Lösung anstreben müssen. Sicherlich recht performant und wie schon erwähnt wurde, eine feine Lösung. Allerdings aufgrund der derzeitigen Anwendungsarchtitektur auch die aufwändigste.

Ich danke euch schonmal für die Ideen und Meinungen, die Helfen mir auch schon weiter :)

Gruß,
DanyCode
 
Bei 6.000 - 10.000 Usern wirst du wahrscheinlich wirklich nicht um eine Datenbak rumkommen. Wenn das ganze noch komplexer wird, waer vllt. auch ein BizTalk-Server gut geeignet. Dazu kann ich allerdings wenig sagen, da ich persoenlich noch nicht wirklich viel damit zu tun hatte.
 

Neue Beiträge

Zurück