Runtime Limits in IIS

Does the IIS HTTP runtime configuration affect a WCF application?

Yes, when the application is using IIS to host its HTTP endpoints. A WCF application that lives in IIS is an IIS application as well, even if you aren't explicitly using ASP.NET compatibility mode. Now, most of the settings for IIS don't make as much sense for WCF as for general web applications, but if you look at the httpRuntime configuration element, then you'll see some that apply.

 <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>

The setting that is most common to impact a WCF application is the runtime limit on maxRequestLength. This setting is intended to limit people making large file uploads but the usage patterns of web services seem to make it more likely for people to build applications with large request messages than in traditional HTTP applications. Note that the setting is specified in kilobytes so it is by default much larger than the maximum received message size in WCF. However, if you're dealing with messages of more than a few megabytes, you may run into this limit and be puzzled why your messages are failing even though the application quotas are sufficient.

Next time: Sending to MSMQ with Integrated Authentication