2011-12-20 11 views
5

Sto creando uno strumento di test per sollecitare il caricamento di un server. Creo molti thread diversi che inviano richieste separate al server. Sembra essere limitato dal ChannelFactory. E 'colli di bottiglia sul rendere la chiamata servizio effettivo, ad esempio:Canale di connessione massima CanalFactory

_proxy.MyServiceCall(...); 

che ho provato diversi approcci:

  • utilizzando un unico ChannelFactory statica condivisa da tutti i thread
  • Creazione di un nuovo canale fabbrica per thread
  • la creazione di un nuovo stabilimento di canale per chiamata

Tutto questi risultati in prestazioni abbastanza simili. Sembra che ci sia un pool statico globale di connessioni disponibili utilizzate dalla fabbrica di canali. Ho provato a cercare questo ma non ho trovato nulla. Vuoi saperne di più su questo? Pensi che la mia ipotesi di un pool statico di connessioni sia corretta? Se sì, sai come sarebbe configurabile?

Questa è la configurazione corrente per l'applicazione di test:

<configuration> 
    <system.serviceModel> 
    <client> 
     <endpoint binding="wsHttpBinding" bindingConfiguration="SynchronizationServiceBinding" contract="My.Namespace.ISynchronizationService" name="ClientBinding"> 
     </endpoint> 
    </client> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="SynchronizationServiceBinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="10485760"> 
      <security mode="Transport"> 
      <transport clientCredentialType="None"/> 
      </security> 
      <reliableSession enabled="false"/> 
      <readerQuotas maxArrayLength="1000000"/> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> </configuration> 
+1

Avete [throttling] (http://msdn.microsoft.com/en-us/library/ms735114%28v=vs.90%29.aspx) configurato? – oleksii

+0

Non ho accesso alla configurazione del server, ma so per certo che il server è in grado di elaborare molte più chiamate, quindi lo strumento di test è attualmente in grado di inviare in modo che il limite sia da qualche parte sullo strumento di test. Ho aggiunto la configurazione per lo strumento di test. – kazvictor

risposta

4

Si è scoperto che tutto quello che dovevo fare è aggiungere una configurazione per system.net connectionManagement:

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

See: Element (Network Settings)

Si noti che il problema in questo thread è lo stesso che ho incontrato: IIS/WAS only handles two requests per client in parallel

+0

Grazie! Stavo cercando di fare esattamente la stessa cosa di te, e stavo pensando di creare più processi per aggirare questo. – Mas

Problemi correlati