Ich glaube, dass Sie Antworten und gute Erklärungen here finden können.
auf einen Blick würden Sie PerCall verwenden Skalierbarkeit Gründen und PerSession für die gängigen Web-Szenarien.
Wenn PerSession mit einmal Client hat zunächst Anruf-Instanz von Service-Implementierung auf dem Server gehalten werden. Jeder Client hat seine eigene Sitzung nur auf einem Thread (!) pro Client ausgeführt. Also, ja 1 Sitzung == 1 Thread standardmäßig. Sie können aber auch ConcurrencyMode ändern, sodass der Client innerhalb einer Sitzung viele gleichzeitige Aufrufe ausführen kann.
Im Fall von PerCall Dienstinstanz wird sofort nach dem Anruf entsorgt.
[EDITED (nach Gesprächen mit David Nelson)]:
Es bedeutet nicht, den gleichen Thread (!)! Es bedeutet nur, dass ThreadPool verfügbaren Thread zum Ausführen von Dienstcode verwendet. Aber wenn Sie 1000 gleichzeitige Clients starten, wird ThreadPool viele Threads zuweisen, die Ressourcen wie Speicher einschließen.
Erläuterung der Threads Verwendung mit Code:
Ich hat einfachen Rechner Service wie beschreitet Arbeiten für WCF-Dienst zu zeigen.
ich Accumulate Methode mit Parameter 2 für fünf mal ausgeführt und dann erstellt neue Client-Proxy und tat das gleiche. Es folgt die Ausgabe, die beweist, dass der Server die Instanz der Dienstimplementierung beibehält (threadId beim Erstellen), aber die Methoden auf verschiedenen Threads ausgeführt werden, die aus ThreadPool stammen.
I'm calculator
Accumulated: 2. ThreadIdOnServiceCreating:6 CurrentThreadId:6
Accumulated: 4. ThreadIdOnServiceCreating:6 CurrentThreadId:7
Accumulated: 6. ThreadIdOnServiceCreating:6 CurrentThreadId:6
Accumulated: 8. ThreadIdOnServiceCreating:6 CurrentThreadId:7
Accumulated: 10. ThreadIdOnServiceCreating:6 CurrentThreadId:6
Accumulated: 2. ThreadIdOnServiceCreating:9 CurrentThreadId:9
Accumulated: 4. ThreadIdOnServiceCreating:9 CurrentThreadId:6
Accumulated: 6. ThreadIdOnServiceCreating:9 CurrentThreadId:9
Accumulated: 8. ThreadIdOnServiceCreating:9 CurrentThreadId:6
Accumulated: 10. ThreadIdOnServiceCreating:9 CurrentThreadId:8
Das Dokument, auf das Sie verwiesen haben, sagt nichts über jede Sitzung aus, die auf einem Thread pro Client ausgeführt wird. Wie sind Sie zu dieser Schlussfolgerung gekommen? –
Zum Beispiel lesen Sie es hier: http://mkdot.net/mknetug/b/dejan/archive/2008/04/29/wcf-service-behaviors-instance-and-concurrency-management.aspx –
Dieser Artikel ist schlecht formuliert und letztlich ungenau. Nachfolgende Anforderungen in derselben Sitzung können auf verschiedenen Threads ausgeführt werden. Es ist sehr einfach, einen Dienst aufzubauen, um dies zu beweisen. –