WCF: Wie füge ich einem WCF -Service einen ServicethrottlingBehavior hinzu?
-
16-09-2019 - |
Frage
Ich habe den folgenden Code, um eine Instanz meines WCF -Dienstes zurückzugeben ServiceClient
:
var readerQuotas = new XmlDictionaryReaderQuotas()
{
MaxDepth = 6000000,
MaxStringContentLength = 6000000,
MaxArrayLength = 6000000,
MaxBytesPerRead = 6000000,
MaxNameTableCharCount = 6000000
};
var throttlingBehaviour = new ServiceThrottlingBehavior(){MaxConcurrentCalls=500,MaxConcurrentInstances=500,MaxConcurrentSessions = 500};
binding = new WSHttpBinding(SecurityMode.None) {MaxReceivedMessageSize = 6000000, ReaderQuotas = readerQuotas};
dualBinding = new WSDualHttpBinding(WSDualHttpSecurityMode.None)
{MaxReceivedMessageSize = 6000000, ReaderQuotas = readerQuotas};
endpointAddress = new EndpointAddress("http://localhost:28666/DBInteractionGateway.svc");
return new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), dualBinding, endpointAddress);
In letzter Zeit hatte ich Probleme mit Timeouts und beschloss, ein Drosselungsverhalten wie solche hinzuzufügen:
var throttlingBehaviour = new ServiceThrottlingBehavior () {
MaxConcurrentCalls=500,
MaxConcurrentInstances=500,
MaxConcurrentSessions = 500
};
Meine Frage ist, Wo im obigen Code sollte ich das hinzufügen throttlingBehaviour
zu meinem MusicRepo_DBAccess_ServiceClient
Beispiel?
Aus einigen der Beispiele, die ich im Web gefunden habe, machen sie so etwas:
ServiceHost host = new ServiceHost(typeof(MyService));
ServiceThrottlingBehavior throttleBehavior = new ServiceThrottlingBehavior
{
MaxConcurrentCalls = 40,
MaxConcurrentInstances = 20,
MaxConcurrentSessions = 20,
};
host.Description.Behaviors.Add(throttleBehavior);
host.Open();
Beachten Sie, dass sie in dem obigen Code a verwenden ServiceHost
Während ich es nicht bin und sie dann öffnen (mit Open()
) Während ich das öffne MusicRepo_DBAccess_ServiceClient
Instanz ... und das hat mich verwirrt.
Lösung
Sie können das Verhalten in der Konfigurationsdatei AFAIK angeben, und der generierte Client wird unter Verwendung von Verhaltensweisen gehorchen.
Einige Konfigurationsabschnitte, die für die Kürze ausgeschlossen sind
<service
behaviorConfiguration="throttleThis" />
<serviceBehaviors>
<behavior name="throttleThis">
<serviceMetadata httpGetEnabled="True" />
<serviceThrottling
maxConcurrentCalls="40"
maxConcurrentInstances="20"
maxConcurrentSessions="20"/>
</behavior>
</serviceBehaviors>
Andere Tipps
Kann in Code für diejenigen wie ich durchgeführt werden, die zur Laufzeit konfigurieren.
VB -Version:
Dim stb As New ServiceThrottlingBehavior
stb.MaxConcurrentSessions = 100
stb.MaxConcurrentCalls = 100
stb.MaxConcurrentInstances = 100
ServiceHost.Description.Behaviors.Add(stb)
C# Version:
ServiceThrottlingBehavior stb = new ServiceThrottlingBehavior {
MaxConcurrentSessions = 100,
MaxConcurrentCalls = 100,
MaxConcurrentInstances = 100
};
ServiceHost.Description.Behaviors.Add(stb);
Droseln ist ein Service -Side -Verhalten (Server-) Verhalten, nicht Client -Seite eins
Arnon