Unterstützt WCF4 (.NET Framework 4) das Clientverbindungs-Pooling?

8

Die Frage lautet also, ob WCF4 Client-Verbindungs-Pooling zu WCF-Service aufruft. Zum Beispiel haben wir ASP.NET-Anwendung als Client und Service (auf separaten Rechnern). Dann irgendwo im Code haben wir so etwas:

%Vor%

Nehmen wir an, wir haben einen anderen Service-Aufruf in einem Stück Code:

%Vor%

Wird also die client2-Verbindung aus dem Verbindungspool genommen?

    
kseen 01.11.2011, 10:05
quelle

2 Antworten

15

Das "Pooling" ist abhängig vom verwendeten Transportprotokoll. Für HTTP verwendet die WCF standardmäßig persistente HTTP-Verbindungen , die für kurze Zeit leben (sie sind nach 100s Inaktivität geschlossen ) und kann anschließend wiederverwendet werden Anfragen (auch von verschiedenen Proxy-Instanzen). Für TCP- und Named-Pipes bietet WCF ein integriertes Pooling .

    
Ladislav Mrnka 01.11.2011, 11:22
quelle
2

Warum würden Sie das tun? WCF kann mehrere Anfragen über einen Client mit ConcurrencyMode.Multiple annehmen. Es wäre also nicht sinnvoll, zwei Clients zu initialisieren.

WCF ServiceContract hat drei wichtige Attribute für dieses Verhalten

InstanceContextMode

  • PerSession (Erstellt pro Sitzung eine Instanz des Service)
  • Single (Erstellt eine einzelne Instanz für jeden Client)
  • PerCall (Erstellt pro Aufruf eine Instanz des Service)

ConcurrencyMode

  • Mehrere (Client kann mehrere Aufrufe gleichzeitig durchführen - & gt; Multithread)
  • Single (Client kann einen Anruf tätigen und andere müssen warten, bis der andere Anruf beendet ist)
  • Reentrant (Client kann mehrere Aufrufe gleichzeitig machen, ich weiß es nicht genau, aber ich denke, es war wie wenn ein Anruf einen anderen wcf-Dienst verwendet, ein anderer Anruf kann bearbeitet werden, bis der andere Dienst beendet ist, so es gibt die Sperre zwischen der Zeit des WCF-Service-Anrufs und der Antwort frei.

Sitzungsmodus

  • Erlaubt (Der Client kann eine Sitzung verwenden, muss aber nicht)
  • NotAllowed (Client kann keine Sitzung verwenden)
  • Erforderlich (Client muss Sitzung verwenden)

Meistens verwende ich InstanceContextMode.PerSession (weil Client 1 keinen Zugriff auf die Variablen im Service von Client 2 hat), ConcurrencyMode.Multiple und SessionMode.Required .

Sie können auch angeben, wie viele Instanzen initialisiert werden können, wie viele gleichzeitige Anrufe durchgeführt werden können und wie viele Sitzungen verwendet werden können.

    
RaphaelH 02.11.2011 06:28
quelle