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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top