2010-12-09 3 views
2

Stellen Sie sich eine Website vor, auf der sich einzelne Kunden gegenseitig sehen können - wie ein soziales Netzwerk oder ein Chatroom.Wie können mehrere ASP.NET-Anfragen von mehreren Clients Informationen gemeinsam nutzen?

Zum Beispiel:
Client1 verbindet sich mit meiner Website.
Der Back-End-C# -Code aktualisiert ein statisches Feld, um die Anwesenheit von Client1 anzuzeigen.
Client2 verbindet sich mit meiner Website.
Wird der Back-End-C# -Code für die zweite Anforderung die Informationen anzeigen, die im statischen Feld der ersten Anforderung gespeichert sind? Muss ich etwas tun, um zu garantieren, dass diese separaten Instanzen meiner ASP-Anwendung statische Daten teilen?

+1

Sie müssen diese Daten irgendwo für beide Sitzungen zugänglich speichern, ich schlage vor, Sie speichern sie in Cache, Anwendung oder einem DB. – Zachary

Antwort

2

Es hängt völlig davon ab, welche Informationen Sie teilen möchten. Verschiedene Optionen können sein:

  • DataBase
  • Cache
  • Anwendungsvariablen

Jede dieser Optionen ist für die spezifischen Bedürfnisse. Sie müssen Ihre Bedürfnisse sorgfältig identifizieren und dann jede der Optionen oder ihre Kombination analysieren, um eine perfekte Lösung zu finden.

Wenn Sie schauen, um nur die Erreichbarkeitsinformationen gemeinsam nutzen, können Sie in diesem Beitrag hier How to tackle this session problem in ASP.NET,VB.NET?

+0

Sieht so aus, als ob eine Datenbank die beste Option ist. Die Stabilität und Skalierbarkeit sind den Performance-Hit und die Trennung von der Anwendung im Speicher wert. – Giffyguy

1

Wenn es sich um statische Felder handelt, die bearbeitet werden, wird es zwischen den verschiedenen Benutzern geteilt. Das einzige Mal, an dem Sie Bedenken haben sollten, dass ein statisches Objekt nicht zwischen den verschiedenen Threads geteilt wird, ist, wenn Sie verschiedene Webserver haben, die Ihre App hosten (wie eine Load-Balancing-Architektur), da dies eine andere Anwendungsdomäne wäre.

2

Sie können auch den Status Application oder Cache verwenden, um Informationen über alle Ihre Clients auszutauschen.

In einer ASP.net-Anwendung wäre die Anwendung/der Cache eine der gebräuchlichsten Methoden zum Austausch von Informationen in der gesamten Anwendung.

Sie müssen jedoch zuerst Folgendes beachten, um sicherzustellen, dass es Ihren spezifischen Anforderungen entspricht.

Wenn Anwendungsstatus verwenden, müssen Sie kennen die verschiedenen Überlegungen:

  1. Ressourcen
  2. Volatilität
  3. Skalierbarkeit
  4. Concurrency

Abschnitt "Application State Considerations" Refer Im obigen Link erfahren Sie mehr über Dinge, die Sie berücksichtigen müssen, bevor Sie sich für Ihr Projekt entscheiden Wahl.

1

halte ich würde einen Windows-Dienst, der die Web-Anwendung (en) über WCF kommunizieren durch.

Dies ermöglicht Ihnen ein hohes Maß an Flexibilität; Sie können damit eine zusätzliche Verarbeitung von Daten außerhalb des Prozesses durchführen (z. B. Aggregieren von Anwesenheitsstatistiken wie "50 Personen in Ihrem erweiterten Netzwerk sind online"). Ein Windows-Dienst befreit Sie außerdem vollständig von allen Einschränkungen, die in Prozessstatusmechanismen auftreten. Es ermöglicht Ihnen, Lasten frei zu laden und mehrere Anwendungen ihre Daten verbrauchen zu lassen.

Wenn die Daten entbehrlich sind, machen Sie den Dienst zustandslos. Behalten Sie andernfalls einige/alle/periodischen Daten in einer Datenbank bei, so dass Sie auch dann wiederherstellen können, wenn der Dienst und/oder die Websites ausfallen.

Schließlich, wenn Sie eine Anwendung erstellen, die von einem Dienst abhängt, ist ein potenzieller einzelner Fehlerpunkt. Die besten Installationen verwenden entweder eine Datenbank oder einen Synchronisationsmechanismus, um die Redundanz von Out-of-Process-Diensten zu gewährleisten.

Bearbeiten: Um mehr Details zu Ihrer ursprünglichen Frage zu geben, sind statische Mitglieder für alle HTTP-Anfragen an die App-Domäne verfügbar, auf der Ihre ASP.Net-Site läuft. Für was es wert ist, können statische Variablen auch (durch Attribute) mit verschiedenen Zugriffsebenen, zB ThreadStaticAttribute.

In der Praxis sind statische Variablen eine billige/schwache Lösung. Sie müssen den Zugriff manuell synchronisieren, und Sie haben wenig Kontrolle über den Ablauf. Sie können eine Cache-basierte Lösung ohne zusätzlichen Aufwand implementieren oder zur Unterstützung der Unternehmensanforderungen auf die oben erwähnte Out-of-Process-Methode umstellen.

Verwandte Themen