2009-10-09 4 views
5

Meine WCF-Servicebibliothek wird als Windows-Dienst gehostet und soll Anforderungen von mehreren Clients verarbeiten. Eine Anforderung, die Clients häufig stellen, ist ziemlich ressourcenintensiv.WCF - Verarbeitungsanforderung von mehreren Clients

Ich habe zwei Zweifel über scenerio Bezug:

  1. Wie eine WCF Dienstanforderung mehr Kunden behandelt?
  2. Gibt es eine WCF-Konfiguration, um den Prozess effizient zu machen?

Vielen Dank!

Antwort

11

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 ConcurrencyModeSingle 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

Verwandte Themen