2010-12-05 4 views
0

Auf den MSDN page für die Membership.ApplicationName Eigenschaft (die zu einem asp.net Mitgliedschaftsanbieter gilt), warnt sie, dass, obwohl eine Membership.ApplicationName in Code ändern, ‚Die Applicationname-Eigenschaft nicht sicher ist, fädelt Bei mehreren Schreibvorgängen kann das Ändern des ApplicationName-Eigenschaftswerts zu einem unerwarteten Verhalten mehrerer Benutzer einer Anwendung führen. Sie empfehlen daher, die Verwendung für eine "Web-Anwendung" zu vermeiden.Ändern Membership.ApplicationName in Code - Thread-Sicherheit

Dies liegt daran, dass der Standardwert SqlMembershipProvider als Singleton geschrieben wird. Aber hier ist meine Frage: Ist es OK, wenn alle Threads in meinem Anwendungsprozess Membership.ApplicationName auf das gleiche setzen?

Ich denke über mehrere Anwendungen auf meiner IIS-Box, jeder mit ihren eigenen separaten Anwendungspool. Ich möchte sie auf den gleichen Ort verweisen, aber basierend auf dem Hostnamen, legen Sie den Anwendungsanbieter auf verschiedene Dinge. Wäre das nicht in Ordnung? Es ist möglicherweise keine Thread-sichere Operation, aber hat nicht jeder Anwendungspool seinen eigenen Prozess und daher seine eigene Instanz SqlMembershipProvider? Jeder Thread, der versucht hat, Membership.ApplicationName für eine gegebene SqlMembershipProvider Instanz zu setzen, würde versuchen, es auf dasselbe zu setzen (der Provider, der für diesen Hostnamen geeignet ist). Oder fehlt mir etwas?

Ich denke, die wichtigste Frage ist, haben alle asp.net-Anwendungen eine SqlMembershipProvider teilen, oder ist eine separate für jeden Anwendungspool-Prozess erstellt?

Antwort

1

Jeder Anwendungspool hätte seinen eigenen MemberShip.ApplicationName, damit Sie sicher sind.

In Bezug auf die SQL-Mitgliedschaft Provider würde das gleiche gelten. Da sich jede Site in einem eigenen Anwendungspool befindet, sind sie eindeutig und getrennt.

Tatsächlich gab es sogar im selben Anwendungspool, in dem Sie jedoch separate ASP.NET-Anwendungen hatten (d. H. Sie haben auf die Anwendung für jeden Ordner erstellen geklickt), unterschiedliche Objekte. Dies liegt daran, dass die Einheit der Anwendungsisolierung in .NET Application Domain ist, die Sie als weiche Prozessgrenze innerhalb eines Windows-Prozesses beschreiben könnten.

die Frage in Ihrem Kommentar zu beantworten, diese Seite auf den MS ASP.NET Quickstart-Tutorials erklärt dies wahrscheinlich und ist gerade aus dem Mund Pferde:

Understanding Applications and State

zu zitieren:

Jede ASP.NET Framework-Anwendung auf ein Webserver wird innerhalb eines eindeutigen .NET Frame ausgeführt Arbeits Anwendung Domäne, die Klasse Isolation garantiert (keine Versionierung oder Namens Konflikte), Sicherheit Sandbox (verhindert den Zugriff auf bestimmte Maschine oder Netzwerkressourcen) und statische variable Isolation.

+0

Danke, Kev ... Ich wollte wirklich diese Antwort. :-) Ich versuche nicht, Ihr Fachwissen in Frage zu stellen, aber könnten Sie mich auf irgendwelche Webseiten hinweisen (vorzugsweise von MS geschrieben), die diesen Punkt klar angeben? Es wäre schön, es von einer wirklich maßgeblichen Quelle zu haben. Ich habe angenommen, dass dies der Fall ist, aber wie ich bereits erwähnt habe, denke ich nicht an die MSDN-Seite zu 'Mitgliedschaft.ApplicationName' beschreibt die Situation sehr deutlich. – Jez

+0

@jezz - Ich habe meine Antwort aktualisiert. – Kev

+0

Kev: Welche Art von Frage wirft die Frage auf, warum die große unheimliche 'Vorsicht' auf der Membership.ApplicationName MSDN Seite? Es sollte zumindest erwähnen, dass Sie diese Instanzen von SqlMembershipProvider ziemlich einfach trennen können. – Jez