Laden...

HttpSessionState im WebService

Erstellt von Powerslave vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.786 Views
P
Powerslave Themenstarter:in
554 Beiträge seit 2005
vor 13 Jahren
HttpSessionState im WebService

Hallo,

ich verwende NHibernate 3.0 als O/R-Mapper.

Auf meiner WebSite bekommt jeder Benutzer sein eigenes ISession-Objekt (NHibernate Verbindung zur Datenbank), welches in einer ASP.NET Session gespeichert wird.

Jetzt habe ich aber auch noch einen WebService, der auch auf die Datenbank zugreifen muss.
Zum Testen habe ich erstmal das ISession-Objekt in einem Singleton verkleidet.
Wenn aber nun viele Anfragen gleichzeitig kommen, fliegen willkürliche NHibernate Fehler (z.B. DataReader already open, usw.)

Nun meine Frage, ob ich auch im WebService auf die HttpSession des aufrufenden Benutzers zugreifen kann um sich so, wie im Web, die ISession separat zu halten?

Vielleicht gibt es auch Dinge zu beachten?

Schönen Dank schonmal im Voraus.

Achtung! - Hinter dir ist ein dreiköpfiger Affe!

L
64 Beiträge seit 2006
vor 13 Jahren

Hallo

Also was mir so dazu einfällt:
"DataReader already open"

klingt nach einer sql abfrage direkt nach einer anderen ohne das der reader zuvor geschlossen wurde

Im Webservice kannst du auf die Session zugreifen in dem du das Attribut und
den Wert setzt >

[WebMethod(EnableSession = true)]
public void TheFunctionName()
{
}

hoffe das es dir ein wenig weiter hilft

grüße

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

Vielleicht gibt es auch Dinge zu beachten? Zu beachten wäre, daß Website und Webservice zur selben Applikation gehören, damit die Session gefunden wird. Da Du aber mit einem Singleton arbeiten kannst, dürfte das ja der Fall sein.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

X
1.177 Beiträge seit 2006
vor 13 Jahren

huhu,

ich kenne jetzt NHibernate nicht, aber "Web" "Session" und "Singleton" lässt mir die Haare zu Berge stehen. Bitte nicht ein Session-Object per Singleton zur Verfügung stellen. Das gibt ganz böses Verhalten, da man im Web immer mit Multithreading rechnen sollte. Wäre ja doof, wenn durch ein Singleton das Session-Objekt zwischen den Benutzern geteilt wird (und seien es nur die rechte für die Datenbank :evil: ).

ich hoffe ich habe es falsch verstanden 🙂

🙂

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo Xynratron,

ich hoffe ich habe es falsch verstanden 😃

Ich hatte es jedenfalls so verstanden daß eine sessionbasierte Lösung gesucht wird um den Singleton entsorgen zu können 😃

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

X
1.177 Beiträge seit 2006
vor 13 Jahren

eine sessionbasierte Lösung gesucht wird um den Singleton entsorgen zu können 😃

hoffen wir mal 😃

dann wäre aber [WebMethod(EnableSession = true)] aus dem ersten Post korrekt (Nochmalige Erwähnung, damit es nicht überlesen wird).

Liebe Grüße

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

P
Powerslave Themenstarter:in
554 Beiträge seit 2005
vor 13 Jahren

Guten Morgen und danke für die vielen Antworten!

momentan ist es so, dass nicht die HttpSession (das wäre böse) sondern die Hibernate-Session (nicht weniger böse) als Singleton gehalten wird, was bei hohem Traffic natürlich Probleme verursacht (habe ich gestern abend noch nachgestellt).

Die Hibernate-Session für jeden Benutzer in der HttpSession zu halten funktioniert und es werden keine Exceptions mehr geschmissen auch bei 100 ausführenden Threads gleichzeitig.

Ich werde jetzt noch ein paar Szenarien durchspielen, aber ich vermute, dass nun alles passt.

Vielen Dank für eure Hilfe 🙂

Achtung! - Hinter dir ist ein dreiköpfiger Affe!