Condividi tramite


Ottimizzazione delle prestazioni del servizio Web WCF

I servizi WCF espongono numerosi parametri di configurazione che influiscono sulle prestazioni. In questo argomento vengono fornite indicazioni generali per l'impostazione di valori ottimali per questi parametri di configurazione per migliorare le prestazioni dei servizi WCF.

Implementare il comportamento di limitazione del servizio (service throttling) per i servizi WCF back-end

Implementare il comportamento serviceThrottling per i servizi WCF back-end. La limitazione dei servizi consente di livellare il carico sui server back-end WCF e di applicare l'assegnazione delle risorse. Il comportamento serviceThrottling per i servizi WCF back-end viene configurato modificando i valori per i parametri maxConcurrentCalls, maxConcurrentSessions e maxConcurrentInstances nel file di configurazione per il servizio WCF. Impostare maxConcurrentCalls, maxConcurrentSessions e maxConcurrentInstances su un valore maggiore di 16 * il numero di CPU o core CPU. Ad esempio, in un computer con 8 core CPU, impostare maxConcurrentCalls, maxConcurrentSessions e maxConcurrentInstances su un valore maggiore di 128 (16 * 8 = 128) come indicato di seguito:

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

Incrementare i valori predefiniti per le proprietà NetTcpBinding.ListenBacklog e NetTcpBinding.MaxConnections nel file del servizio WCF back-end web.config

La proprietà NetTcpBinding.ListenBacklog controlla il numero massimo di richieste di connessione in coda che possono essere in sospeso per un servizio Web. La proprietà NetTcpBinding.MaxConnections controlla il numero massimo di connessioni da raggruppare per il successivo riutilizzo nel client e il numero massimo di connessioni consentite per l'invio in sospeso nel server. Ognuna di queste proprietà usa un valore predefinito pari a 10 che può essere non ottimale, in particolare per gli scenari di elaborazione dei documenti che richiedono una velocità effettiva elevata.

Prendere in considerazione l’aumento del valore predefinito di queste proprietà nel caso di scenari di elaborazione di documenti ad alta velocità di trasmissione che utilizzano servizi WCF che implementano la classe di associazione netTcpBinding.

Nell'esempio seguente i parametri listenBacklog e maxConnections vengono impostati su un valore "200".

<netTcpBinding>
   <binding name="netTcpBinding"
      closeTimeout="00:10:00"
      openTimeout="00:10:00"
      receiveTimeout="00:10:00"
      sendTimeout="00:10:00"
      transactionFlow="false"
      transferMode="Buffered"
      transactionProtocol="OleTransactions"
      hostNameComparisonMode="StrongWildcard"
      listenBacklog="200"
      maxBufferPoolSize="1048576"
      maxBufferSize="10485760"
      maxConnections="200"
      maxReceivedMessageSize="10485760">
      <readerQuotas
         maxDepth="32"
         maxStringContentLength="8192"
         maxArrayLength="16384"
         maxBytesPerRead="4096"
         maxNameTableCharCount="16384" />
      <reliableSession
         ordered="true"
         inactivityTimeout="00:10:00"
         enabled="false" />
      <security mode="None">
         <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
         <message clientCredentialType="Windows" />
      </security>
   </binding>
</netTcpBinding>

Per altre informazioni sulla proprietà NetTcpBinding.ListenBacklog, vedere Proprietà NetTcpBinding.ListenBacklog.

Per altre informazioni sulla proprietà NetTcpBinding.MaxConnections, vedere Proprietà NetTcpBinding.MaxConnections.

Eliminare ASP.NET httpModules non necessari per eseguire i servizi Web WCF

Per impostazione predefinita, diversi ASP.NET httpModules sono definiti nella pipeline di richiesta in IIS 6.0 e nella pipeline classica o integrata in IIS 7.5/7.0. Questi componenti intercettano ed elaborano tutte le richieste in ingresso. I moduli predefiniti sono definiti nel file di web.config contenuto nella cartella %windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG per applicazioni ASP.NET a 32 bit e nella cartella %windir%\Microsoft.NET\Framework64\v2.0.50727\CONFIG per applicazioni ASP.NET a 64 bit, come illustrato nel frammento di codice seguente.

<httpModules>
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule"/>
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
<add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule"/>
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"/>
<add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule"/>
<add name="RoleManager" type="System.Web.Security.RoleManagerModule"/>
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"/>
<add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule"/>
<add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule"/>
<add name="Profile" type="System.Web.Profile.ProfileModule"/>
<add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</httpModules>

Nella maggior parte degli scenari non è necessario caricare tutti questi moduli. Pertanto, è possibile migliorare le prestazioni eliminando i seguenti httpModules durante l'esecuzione di servizi Web WCF:

  • Sessione

  • WindowsAuthentication

  • Autenticazione con moduli (FormsAuthentication)

  • Autenticazione tramite passaporto

  • GestoreRuoli

  • IdentificazioneAnonima

  • Profilo

Per altre informazioni sull'uso dei moduli/gestori HTTP WCF asincroni per migliorare la scalabilità dei servizi WCF ospitati in IIS 7.5/7.0, vedere il blog di Wenlong Dong Orcas SP1 Improvement: Asynchronous WCF HTTP Module/Handler for IIS7 for Better Server Scalability.

Vedere anche

Ottimizzazione delle prestazioni dell'adapter WCF bizTalk Server