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.
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
@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. –
Könnten Sie mir bitte erklären, wie ich diesen Betrag variieren kann? – flashnik