Limitation de la taille des messages WCF dans IIS
Lors du déploiement de services WCF (Windows Communication Foundation), il est possible de prévoir un hébergement dans IIS avec un mode compatible ASP.NET. Dans ce cadre, il est important de prendre en considération la configuration par défaut du Framework .Net au niveau HttpRuntime et notamment sur la volumétrie des requêtes Http transmisent au serveur.
En effet, le fait d'être en mode compatibilité ASP.NET induit le fait que le service s'exécutera selon la configuration établie dans la section HttpRuntime du fichier web.config ou machine.config. Ci-dessous un extrait du fichier machine.config par défaut :
<configuration>
<system.web>
<httpRuntime
executionTimeout="110"
maxRequestLength="4096"
requestLengthDiskThreshold="80"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="5000"
enableKernelOutputCache="true"
enableVersionHeader="true"
requireRootedSaveAsPath="true"
enable="true"
shutdownTimeout="90"
delayNotificationTimeout="5"
waitChangeNotification="0"
maxWaitChangeNotification="0"
requestPriority="Normal"
enableHeaderChecking="true"
sendCacheControlHeader="true"
apartmentThreading="false"
/>
</system.web>
</configuration>
Il est donc à noté que, par défaut, toute requête émise vers le serveur ne pourra pas dépasser les 4Mo même si la clé maxReceivedMessageSize de WCF est paramétrée selon vos souhaits. En effet, les clés de configuration HttpRuntime prennent le pas sur la configuration System.ServiceModel de WCF définie.
Si ce cas est valable pour la taille des requêtes émises vers le serveur, il en va de même pour les paramètres liés aux optimisations de performances et notamment ici : minFreeThreads...
Pensez donc à modifier les clés HttpRuntime soit au niveau du web.config si vous souhaitez ne l'appliquez qu'a votre application soit au niveau de machine.config si vous souhaitez l'appliquer de manière globale.
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :