7 Stimmen

Wie ein IIS gehostet WCF oder ASMX [Webservice] zu zwingen, Session-Objekt schreibgeschützt verwenden?

Während ich meine ersten Ajax-Versuche machte, entschied ich mich auch, jetzt IIS gehostetes WCF zu verwenden. Das Seltsame ist, dass die WCF nicht mehrere Anfragen parallel für denselben Benutzer/Sitzung verarbeiten kann, wenn der Sessionmode aktiviert ist! Wenn sessionmode auf asp.net deaktiviert ist, werden die Anfragen parallel verarbeitet. Der Browser/Client kann mehrere verschiedene Anfragen ausführen, von denen einige schon lange laufen. Dies blockiert alle weiteren Requests und macht meine Ajax-App unbrauchbar.

Dies gilt auch für asmx [webservices]. Ich hatte die große Hoffnung, die Webservice-Methoden mit dem "IReadOnlySessionState"-Interface zu kompilieren, aber das hat - im Gegensatz zu Webseiten - keinen Einfluss. Aber ich brauche den Zugriff [meist readonly] auf die asp.net Session!

Kennt jemand eine Lösung für dieses Problem?

Auf jeden Fall, vielen Dank!

br--mabra

15voto

Cine Punkte 3977

In .NET 4 können Sie dies in Application_BeginRequest

if (Context.Request.Path.EndsWith("xxx.svc"))
   Context.SetSessionStateBehavior(SessionStateBehavior.ReadOnly);

0 Stimmen

WOW, ein Versuch ist es wert, um eine Menge Ärger loszuwerden... Sie können dies jederzeit vor dem Pipeline-Ereignis AcquireRequestState aufrufen

0 Stimmen

Gibt es eine Möglichkeit, die Sie in ein benutzerdefiniertes Verhalten oder ein Attribut verwandeln könnte, so dass Sie nicht brauchen, um jeden Dienst angeben, die Sie dies auf in Ihre global.asax-Datei möchten?

0voto

Ash Eldritch Punkte 1504

Ich habe dies gefunden:

http://blogs.msdn.com/silverlightws/archive/2009/09/30/having-a-pollingduplex-service-and-any-other-wcf-service-in-the-same-website-causes-silverlight-calls-to-be-slow.aspx

Die besagt,

"Alle WCF-Dienste erfordern Lese-/Schreibzugriff auf den Sitzungsstatus, wenn Sie ASP.Net-Sitzungen aktivieren, was dazu führt, dass die Antworten sequenziell in eine Warteschlange gestellt werden. Idealerweise sollte der Benutzer in der Lage sein, den WCF-Handler so zu konfigurieren, dass er nur lesen kann, was es ermöglichen würde, dass Polling-Duplex-Dienste mit Sitzungen arbeiten. Leider wird dies zum jetzigen Zeitpunkt nicht unterstützt.

...das Einzige, was mir einfällt, ist, ob es eine Möglichkeit gibt, die vorzeitige Freigabe des Schlosses manuell zu erzwingen. Ich schaue mir das gerade an.

0 Stimmen

Hallo! Danke für Ihren Beitrag! Das erklärt nur einen weiteren Grund, WCF nicht zu verwenden. Ich habe versucht, WebServices, die das gleiche gehavoir zu haben scheint. Obwohl es mehr Arbeit ist, verwende ich ASMX mit concurreny in Ort .... MS neue Technologien sind manchmal von Stonehenge ... Vielen Dank!! --Mabra

0voto

felickz Punkte 4102

Sie können einen benutzerdefinierten Sitzungsstatusanbieter bereitstellen

Siehe: http://koolsand.blogspot.com/2010/02/why-iis-hosted-wcf-services-does-not.html

wenn eine Anfrage svc in der Datei Pfad enthält, impliziert dies, dass der Standard-Sitzungs state provider an, um eine schreibgeschützte Sperre zu verwenden und nicht eine Schreib-Lese-Sperre zu verwenden. Die Verwendung von Lesesperre kann der nächste wcf Aufruf gleichzeitig ausgeführt werden.

0 Stimmen

Übrigens habe ich diesen Link im msdn Link Blog von Ash gefunden

0 Stimmen

Schade, dass es mit Reflexion arbeitet :(

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X