2010-01-25 1 views
7

Ich denke daran, meinen WCF-Dienst selbst zu hosten, anstatt IIS zu verwenden. Eine große Frage für mich ist, ob ich mehrere Servicehosts instanziieren muss, wie es IIS tut, oder einer wird genug sein.Was sind die Vorteile für mehrere Servicehosts? Unterstützt ein ServiceHost mehrere gleichzeitige Verbindungen an einem Endpunkt?

Müssen mehrere Servicedienstleister irgendwelche Vorteile außer Sicherheitsgründen dut zur Isolation geben?

Kann ein Servicehost gleichzeitig mehrere Verbindungen an einem Endpunkt bedienen?

Antwort

11

Es gibt keinen Vorteil oder Wahl, wirklich - eine ServiceHost (Instanz dieser Klasse) kann genau einen Dienst hosten, und für jeden Dienst benötigen Sie einen separaten Dienst-Host. Es ist ein 1: 1-Mapping - immer, keine Wahl.

Aber natürlich kann Ihr Windows NT Service oder Konsole App mehrere ServiceHost Objekte zur gleichen Zeit aktiv haben. Dies kann nützlich sein, wenn Sie eine Reihe von Diensten haben, die logisch zusammengehören und nicht wirklich ohne einander existieren können - wo es keinen Sinn macht, einen von ihnen zu starten und einen anderen nicht zu starten.

Und ja, ein Service-Host kann einen Service hosten, der mehrere Endpunkte verfügbar macht, und mehrere Clients können sich gleichzeitig auf diesen separaten Endpunkten verbinden, kein Problem. Die WCF-Laufzeit erstellt eine Anzahl von Worker-Threads, um eingehende Anfragen unabhängig voneinander zu behandeln (Sie können diese mit dem ServiceThrottling-Verhalten einschränken).


einzurichten und Kontrolle, wie viele gleichzeitige Anrufe und Anfragen, die Sie haben, werden Sie am ServiceThrottling Verhalten auf der Serverseite suchen.

<behaviors> 
    <serviceBehaviors> 
     <behavior name="serviceThrottled"> 
      <serviceThrottling 
       maxConcurrentCalls="16" 
       maxConcurrentInstances="26" 
       maxConcurrentSessions="10"/> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 

und Sie müssen diesen Dienst Verhalten Konfiguration in Ihrem Service Erklärung verweisen, natürlich:

<service name="YourService" behaviorConfiguration="serviceThrottled"> 
    ..... 
</service> 

Diese sind die Standardwerte. Die Erläuterungen sind wie folgt (aus Dan Rigsby Blog-Post, verkürzt):

  • MaxConcurrentCalls (default = 16) [Per-message] Die maximale Anzahl von Nachrichten, die aktiv bearbeitet werden können.

  • MaxConcurrentInstances (Standardwert = 26) Die maximale Anzahl von InstanceContext-Objekten in einem Dienst, die gleichzeitig ausgeführt werden können. Bei einem Dienst pro Sitzung entspricht dies der maximalen Anzahl von Sitzungen, bei einem Dienst pro Anruf ist dies die maximale Anzahl gleichzeitig ablaufender Anrufe, bei Singletons ist dies sinnlos.

  • MaxConcurrentSessions (Standard = 10) [Pro-Kanal] Die maximale Anzahl von Sitzungen, die ein Dienst gleichzeitig akzeptieren kann. Nur ins Spiel kommt mit sitzungsbasierten Bindungen (wsHttp oder NetTcp)

Definitiv auch Dan Rigsby's excellent blog post zum Thema heraus überprüfen.

+0

Nein, ich bin interessiert, wenn ich einen logischen Dienst mit einem Endpunkt habe, aber ich brauche mehrere gleichzeitige Verbindung mit dem Dienst von mehreren Clients (obwohl eine Art von Endpunkt). – flashnik

+0

@flashnik: das ist definitiv kein Problem.Standardmäßig sind 10-16 gleichzeitige Anrufe auf dem Dienst möglich, unabhängig davon, auf welchem ​​Endpunkt sie eingehen. –

+0

Könnten Sie mir bitte erklären, wie ich diesen Betrag variieren kann? – flashnik

Verwandte Themen