4

Ist eine statische Variable in einem Webdienst zwischen allen ausgeführten Aufrufen des Webdienstes auf einem Server freigegeben?Statische Felder in einem ASP.NET-Webdienst

In meinem Fall möchte ich eine serverweite Sync-Lock, und ich glaube ich, dass mit einem einzigen

private static Object syncHandle = new Object(); 

erreichen kann, ist das richtig?

Antwort

2

Ja, sie werden alle per AppDomain geteilt, weshalb sie im Allgemeinen nicht verwendet werden sollten!

Sie sollten im Allgemeinen nicht verwendet werden, weil sie so unwahrscheinlich verwendet werden. Auch weil es sicherere Alternativen wie HttpContext.Cache oder sogar Session-Status gibt.

Wenn Sie jedoch alle Zugriffe auf diese statischen Member kapseln und das Sperren korrekt durchführen, haben Sie eine sichere Implementierung, die sich dann als Engpass erweisen kann, wobei alle Threads um die freigegebene Ressource konkurrieren. Es ist wirklich besser, darauf zu verzichten.

Sie scheinen auch ASMX-Webdienste zu meinen, aber Sie sollten ASMX oder WCF angeben.

+0

warum sollten sie nicht verwendet werden? Ich würde sagen, dass statische Objekte sehr gut in Web-Anwendungen verwendet werden können, insbesondere um gemeinsame Daten zwischenzuspeichern. – Kibbee

+0

Wenn Sie gemeinsam genutzte Daten mit dem Anwendungscache zwischenspeichern möchten – JoshBerke

1

Ich glaube, dass sie geteilt werden, solange sie im selben Prozess laufen. So haben zwei Personen, die vom selben Server anfragen, dieselbe Instanz des Objekts. Sie können jedoch verschiedene Anwendungen in einem anderen Computer auf IIS ausführen, in diesem Fall bin ich ziemlich sicher, dass Instanzen für Objekte nicht freigegeben werden.

1

Sie werden alle geteilt, es sei denn, Sie haben einen Web Garden. Ein Web-Garten besteht aus mehreren Host-Prozessen, die eine einzelne Anwendung verwalten. In diesem Fall hat jeder Host seine eigenen statischen Daten.

Verwandte Themen