2010-03-16 16 views
18

Ho un servizio WCF distribuito in un'app console con BasicHTTPBinding e SSL abilitato. Il seguente attributo è impostato così:Servizio WCF Throttling

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

ho anche impostare il comportamento di limitazione al

<serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentSessions="2147483647" 
     maxConcurrentInstances="2147483647" /> 

D'altra parte ho creato un client di prova (per test di carico) che avvia più client contemporaneamente (più thread) ed esegue le transazioni sul server. Tutto sembra a posto, ma sul server l'utilizzo della CPU non aumenta, quindi ho aggiunto alcune registrazioni per visualizzare il numero di chiamate simultanee al server e ho scoperto che non è mai andato oltre 6.

Ho esaminato il codice di registrazione del contatore delle prestazioni altro di due volte e mi sembra soddisfacente.

Quindi voglio chiedere dov'è il problema in questa situazione? Non ho ancora specificato alcun tipo di ContextMode o di ConcurrencyMode.

Dopo questo post ho notato che ogni volta che avvio un altro client di Intance of Test il mio contatore di chiamate server contemporanee aumenta a 2 come se sto eseguendo solo 1 istanza le chiamate simultanee di massimo Rcvd saranno 2 e se ci sono due istanze uguali il valore va a 4 e così via. Esiste un limite di Numero di chiamate WCF da una sola volta?

******** Aggiunto il 17 marzo ********

Oggi ho corso un altro test con un client di prova (con 50 utenti simultanei) sulla stessa macchina su cui il server è in esecuzione. Questa volta sto ottenendo il risultato esatto che volevo che mostrasse (cioè il numero massimo di chiamate simultanee Rcvd by Server = 50).

Ma ho bisogno di farlo ugualmente su altre macchine. Qualcuno può aiutarmi su questo?

risposta

18

Ho trovato una soluzione: esiste un limite di connessione su ServicePointManager che causa questo problema. Per rimuovere questo limite è sufficiente impostare

System.Net.ServicePointManager.DefaultConnectionLimit = X; 

dove il limite di default è 2.

+4

Da @JuliaS: Da dove viene questa linea va? Si tratta di un'impostazione del servizio client o WCF? –

+1

scusa per la risposta tardiva: questo va a qualsiasi applicazione .net che rende più connessioni simultanee in uscita a qualsiasi server. –

22

Oppure utilizzare questa configurazione nel client.

<system.net> 
    <connectionManagement> 
     <add maxconnection = "200" address ="*" /> 
    </connectionManagement> 
    </system.net> 

Qui 200 è il limite da parte del cliente

+0

È descritto qui http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx e forse è necessario conoscere questo http://support.microsoft.com/kb/969189 –

+0

MSDN: [ Elemento (Impostazioni di rete)] (https://msdn.microsoft.com/en-us/library/fb6y0fyc.aspx) –

+0

ho aggiunto maxconnection = "100" address = "*" ma senza fortuna ottenere l'errore di timeout in WCF –