This is the question from one of our clients. The client insisted on returning large datasets, well in excess of 10,000 records. I will leave the story of figuring out how to properly specify the MaxItemsInObjectGraph service behavior attribute for some other post, but the other problem I was constantly aware of, was the data size returned from the server. With all filters set to max, the data set was well in excess of 30 megabytes. This might not be a big problem on a local network, but if some of your users are located across the big pond called Atlantic, you might want to compress your data before shipping it over.

Now, the IIS 7 console only allows you to enable or disable static compression, but it does not let you control which dynamic types are being compressed as well as the level of compression desired for each content type.

The command you are supposed to use instead is AppCmd.exe located in C:\Windows\System32\inetsrv directory.

So here are three sample commands that helped me reduce the size of my WCF RIA Domain Service's binary response by 80%. Needless to say I was pleasantly shocked.

Enable compression on WebDevel webserver (when you have multiple servers and want to do it specifically for each)

C:\Windows\System32\inetsrv>Appcmd.exe set config "WebDevel" -section:urlCompression -doStaticCompression:true -doDynamicCompression:true

Add mime-type application/msbin1 to dynamic compression list (service wide)

C:\Windows\System32\inetsrv>Appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/msbin1',enabled='True']" /commit:apphost

Set compression levels for static and dynamic content (service wide)

C:\Windows\System32\inetsrv>Appcmd.exe set config -section:httpCompression -[name='gzip'].staticCompressionLevel:9 -[name='gzip'].dynamicCompressionLevel:5