WCF: Come faccio ad aggiungere un ServiceThrottlingBehavior di un Servizio WCF?

Ho il seguente codice per tornare indietro di un’istanza del mio Servizio WCF 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);

Ultimamente ho avuto qualche problema con i timeout e così ho deciso di aggiungere una limitazione del comportamento, come ad esempio:

    var throttlingBehaviour = new ServiceThrottlingBehavior () {
        MaxConcurrentCalls=500, 
        MaxConcurrentInstances=500,
        MaxConcurrentSessions = 500
    }; 

La mia domanda è, dove nel codice di cui sopra devo aggiungere questo throttlingBehaviour a mio MusicRepo_DBAccess_ServiceClient istanza?


Da alcuni esempi che ho trovato sul web, che stanno facendo qualcosa di simile a questo:

ServiceHost host = new ServiceHost(typeof(MyService));
ServiceThrottlingBehavior throttleBehavior = new ServiceThrottlingBehavior
{
    MaxConcurrentCalls = 40,
    MaxConcurrentInstances = 20,
    MaxConcurrentSessions = 20,
};
host.Description.Behaviors.Add(throttleBehavior);
host.Open();

Notare che nel codice di cui sopra tramite un ServiceHost considerando che io non sono, e sono quindi l’apertura (con Open()) considerando che ho aperto il MusicRepo_DBAccess_ServiceClient esempio…e questo è quello che mi ha confuso.

  • Non si può avere questo in un file di configurazione?
  • Ho bisogno di condividere questo servizio wcf con più progetti senza di loro avere un app.file di configurazione…ecco perché sto costruendo la config a livello di programmazione
  • Di dove sei che ospita il servizio?
InformationsquelleAutor Andreas Grech | 2009-04-27



3 Replies
  1. 3

    È possibile specificare il comportamento nel file di configurazione, per quanto ne so, e il client generato obbedire, usando i comportamenti.

    Alcune sezioni di configurazione esclusi per ragioni di brevità

    <service 
        behaviorConfiguration="throttleThis" />
    
            <serviceBehaviors>
                <behavior name="throttleThis">
                    <serviceMetadata httpGetEnabled="True" />
                    <serviceThrottling
                        maxConcurrentCalls="40"
                        maxConcurrentInstances="20"
                        maxConcurrentSessions="20"/>
                </behavior>
            </serviceBehaviors>
  2. 18

    Può essere fatto in codice per chi, come me, che consente di configurare in fase di runtime.

    vb versione:

        Dim stb As New ServiceThrottlingBehavior
        stb.MaxConcurrentSessions = 100
        stb.MaxConcurrentCalls = 100
        stb.MaxConcurrentInstances = 100
        ServiceHost.Description.Behaviors.Add(stb)

    c# versione:

        ServiceThrottlingBehavior stb = new ServiceThrottlingBehavior {
            MaxConcurrentSessions = 100,
            MaxConcurrentCalls = 100,
            MaxConcurrentInstances = 100
        };
        ServiceHost.Description.Behaviors.Add(stb);
  3. 6

    Limitazione è un lato di servizio (server) comportamento non lato client una

    Arnon

    • Dovrebbe essere configurato in modo da non codificato?

Lascia un commento