2010-12-17 10 views
1

Ich habe einen alten .ASMX-Webservice erstellt und möchte wissen, wie das integrierte ADO.NET-Verbindungspooling damit funktioniert.Wie funktioniert ADO.NET Connection Pooling mit .ASMX Web Services?

Der Web-Service verwendet kein Singleton-Muster und wird daher bei jeder Anfrage neu instanziiert. Meine Frage ist, werden Verbindungen nach jeder Dienstanforderung aus dem Pool entfernt oder werden sie über Anfragen im Pool gehalten? Mein Dienst wird sehr häufig aufgerufen, aber ich möchte nicht jedes Mal Setup und Abbau von Verbindungen vornehmen, wenn dies vermieden werden kann.

Ich habe gelesen, dass der Pool für die AppDomain verwaltet wird, aber ich bin mir nicht sicher, ob jede Anfrage eine neue AppDomain erzeugt oder nicht.

Ich bin auch neugierig, ob es in diesem Fall nützlich wäre, Min Pool Size (auf eine kleine Zahl außer 0) zu setzen.

Wer weiß?

Antwort

3

Nein jede Anfrage generiert keine neue App-Domäne. Alle Anforderungen für diese Website/Anwendung befinden sich in derselben Anwendungsdomäne und teilen daher den Verbindungspool. Sobald die asmx-Anfrage mit der Verbindung beendet ist, wird sie an den Pool zurückgegeben und die nächste Anfrage in der Zeile ergreift sie (vorausgesetzt, es ist keine weitere Verbindung in dem Pool verfügbar).

Ein Punkt der Klarstellung. Sie können zwei verschiedene Webanwendungen verwenden, die auf denselben Code verweisen und sich in verschiedenen App-Domänen befinden. Die beiden Anwendungen teilen nichts (denken Sie daran, dieselbe Anwendung zweimal zu starten).

Ich bin auch gespannt, ob es vorteilhaft wäre Min Pool Size einzustellen (zu einer kleinen Zahl ungleich 0) in diesem Fall .

So kann es vorteilhaft sein, abhängig von der Anwendung. Das Erstellen von Verbindungen erfordert Zeit, sodass Sie auf etwas verzichten können. Wenn Sie eine Anfrage haben, die besagt, dass eine Verbindung verwendet wird, kann es gut sein, eine Person darauf warten zu lassen (es hängt alles von der schnellen Reaktion der Anwendung ab). Dies kann wirklich ins Spiel kommen, wenn Sie drei oder vier verschiedene (für den einen Punkt) für eine Anfrage öffnen müssen. Warum brauchen Sie mehrere Verbindungen? Was ist mit einem für den Zugriff auf Daten und einem separaten Thread für die Protokollierung in der Datenbank (Logging in der Datenbank vs eine Datei ist eine völlig andere Konversation)? Jetzt brauchst du zwei. Es gibt mehrere Szenarien, in denen dies zum Tragen kommen kann. Abhängig von Ihrem Datenbankserver kann das Halten einer offenen Verbindung ziemlich billig sein, so dass es auf eine kleine Zahl eingestellt werden kann, kann ein riesiger Knall für Ihr Geld sein. (Für die Aufzeichnung habe ich Szenarien gesehen, wo die Verbindung zu einer Datenbank mehrere Sekunden dauerte, wie 3-5, also war das Halten einer offenen Verbindung für einen Benutzer von Vorteil.)

Dies ist für Max Pool Size
Nein, es ist nicht vorteilhaft, da alle Anfragen an diesen Dienst den gleichen Pool verwenden (vorausgesetzt, die Verbindungen verwenden die gleiche Verbindungszeichenfolge und treffen keine unterschiedlichen Server. Diese haben separate Verbindungspools). Da es keine verfügbaren Verbindungen gibt, ist dies eine sehr schnelle und todsichere Möglichkeit, die Leistung Ihres Dienstes zu beeinträchtigen.

+0

Danke, es ist, was ich vermutete, wollte aber eine Überprüfung. –

+0

Ich dachte Einstellung Min Pool Size bedeutete, dass immer x Anzahl der Verbindungen zur Verfügung stehen würde, und nicht nach einer gewissen Leerlaufzeit zerstört werden. –

+0

du hast recht Ich habe das mit Max Pool Size gemischt. – kemiller2002

Verwandte Themen