Domanda

Ho un servizio WCF distribuito in una console app con basicHttpBinding e SSL abilitato. Il seguente attributo è impostato così:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Ho anche impostare il comportamento di limitazione per

<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 operazioni sul server. Tutto sembra bene, ma sul server di l'utilizzo della CPU non aumenta così ho aggiunto un po 'di registrazione per visualizzare il numero di chiamate simultanee al server e ha scoperto che non è mai andato oltre 6.

Ho rivisto il codice del contatore registrazione delle prestazioni più di due volte e sembra bene a me.

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

Dopo questo post ho notato che ogni volta che comincio un altro intance di prova client mio server concorrente chiamate contatore aumenta di 2 come se sto facendo funzionare solo 1 istanza la massima Concurrent ric le chiamate saranno 2 e se ci sono due esempio lo stesso valore va a 4 e così via. C'è un limite di numero di WCF chiamate da una volta processo?

******** ******** 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 quello che volevo per mostrare (cioè chiede Massimo simultanei RCVD dal server = 50).

Ma ho bisogno di farlo lo stesso su altre macchine pure. Qualcuno mi può aiutare su questo?

È stato utile?

Soluzione 2

ho trovato una soluzione: c'è un limite di connessioni su ServicePointManager che stava causando questo problema. Per rimuovere questo limite è sufficiente impostare

System.Net.ServicePointManager.DefaultConnectionLimit = X;

dove il limite predefinito è 2.

Altri suggerimenti

In alternativa, utilizzare questa configurazione nel client.

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

Ecco 200 è il limite dal client

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top