3 Stimmen

ASP.Net Sitzungszustand

Ich frage mich, ob es möglich wäre, die sqlConnectionString für SessionState in ASP.net basierend auf der Domäne, auf der eine Anwendung läuft, zu ändern?

Ein Szenario; Wir haben 20 Websites, die von einer Anwendung ausgeführt werden und jeweils mit verschiedenen Datenbanken kommunizieren, je nachdem, von welcher Domäne (Website) aus sie durchsucht werden.

Beim Durchsuchen von www.domain1.com spricht die Anwendung mit der Datenbank 'db1'. Die Website www.domain2.com spricht dagegen mit der Datenbank 'db2' usw., wodurch der relevante Inhalt ausgewählt wird und auch die Last auf jede Datenbank verteilt wird, anstatt eine Master-Datenbank zu verwenden, um alle Verbindungen für die Websites zu handhaben.

Ein Problem, das jedoch aufgetreten ist - für dieses Setup verwenden wir den SqlServer-Modus für den SessionState, sodass alle Benutzer aller Websitesitzungen in einer aspstate-Datenbank gespeichert werden. Mit zunehmender Auslastung der Websites / Anzahl der Websites nimmt diese Datenbank jedoch unter steigendem Druck zu, um alle Session-Anfragen für alle Websites zu verarbeiten, und wir beginnen, einige Timeouts zu erhalten, bei denen die Verbindungen zu dieser Datenbank zu einem Engpass werden.

Wir können die Websites trennen und sie in ihre eigene Anwendung verschieben und verschiedene Anwendungen mit demselben Code einrichten, aber in jeder Anwendung eine andere Session-Datenbank in jeder Web.Config festlegen und so die Last reduzieren. Diese Aufgabe wäre jedoch ziemlich zeitaufwändig und würde langfristig zu mehr Verwaltungsaufwand führen. ALSO.. Ich würde gerne wissen, ob es möglich ist, innerhalb des Codes die sqlConnectionString für SessionState, basierend auf einer Domäne, zu ändern, bevor das Sitzungsobjekt erstellt wird? Können wir von System.Web.HttpApplication erben und das Ereignis Application_AcquireRequestState verwenden, um das erforderliche Setup des HttpSessionState-Objekts zu erstellen?

Hoffentlich ergibt das Sinn und jemand kann einige Hinweise geben und mir beweisen, dass dies kein unrealistischer Traum ist!

Prost, Steve

0voto

LukeH Punkte 251752

Sie könnten Ihre Sitzung über verschiedene Datenbanken aufteilen, indem Sie IPartitionResolver implementieren und für jede Domäne eine andere Partition verwenden.

Hier ist ein Beispiel, wie man einen benutzerdefinierten Partition-Resolver implementiert. (Das Beispiel partitioniert nach Sitzungs-ID, aber es wäre einfach, es stattdessen nach Domäne zu partitionieren.)

0voto

Darth Continent Punkte 2281

Wir haben mehrere Dutzend Entwicklungssites, deren Datenbankverbindungen über die Haupt-Web.Config des Projekts verwaltet werden.

Es gibt einen separaten Konfigurationsbereich, der jedem URL auf unserem Intranet entspricht (z. B. http://development11, http://development12). Wir haben SQL-Instanzen mit einer ähnlichen Benennungskonvention (DEVDB1\SQL1, DEVDB1\SQL2).

Basierend auf der auf dem Intranet-IIS-Server konfigurierten URL greift die App auf die entsprechende Konfiguration zu. Zum Testen können wir den Benutzer, den Datenbankserver oder einzelne Datenbanken, die für eine bestimmte Site verwendet werden, einfach ändern.

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