In Ihrem Standardszenario erstellt der WCF-Service-Host (der Server, der Ihre Serviceklasse hostet) für jede eingehende Anfrage eine neue Instanz Ihrer Serviceklasse und lässt die Anfrage bearbeiten ("per-Call" -Aktivierung)).
Sie können die maximale Anzahl dieser gleichzeitig aktiven Serviceklasseninstanzen mithilfe des Verhaltens serviceThrottling
auf Ihrem Server optimieren.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ThrottledServiceBehavior">
<serviceThrottling
maxConcurrentCalls="25"
maxConcurrentSessions="25"
maxConcurrentInstances="25"/>
</behavior>
</serviceBehaviors>
</behaviors>
Es ist eine wirklich gute Erklärung der Optionen des Dienstes Drosselverhalten und die Standardwerte in Kenny Wolf blog post here.
Außerdem haben die Einstellungen InstanceContextMode
und ConcurrencyMode
in Ihrer Serviceklasse (die den Servicevertrag implementiert) einen starken Einfluss darauf, wie Ihr Service Parallelität und mehrere Anfragen verarbeitet.
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall,
ConcurrencyMode=ConcurrencyMode.Single)]
class YourServiceClass : IYourService
{
.....
}
InstanceContextMode
sollte PerCall
(jeder Aufruf Anfrage bekommt eine neue, separate Instanz) und dann können ConcurrencyMode
Single
sein (was am leichtesten zu entwickeln).
InstanceContextMode
auch PerSession
sein könnte, wenn Sie eine sitzungsbasierte Ansatz (nicht sehr häufig) benötigen, oder Single
(Ihre Service-Klasse ein Singleton würde - dies sehr entmutigt zu verwenden, es sei denn, Sie absolut positiv zu über alle und wissen, die Macken und Probleme damit!).
ConcurrencyMode
könnte auch Reentrant
(nur relevant für Duplex-Verträge und Bindungen) oder Multiple
sein (multithreaded Singletons Serviceklasse - sehr riskant und schwierig zu entwickeln).
Marc