How to find out whether particular web server's GZip is enabled or not and How to apply the
GZip compression for the web site under IIS 6.0?
The IIS GUI doesn't support turning compression on in IIS6. You'll need to update the IIS metabase directly with the settings instead.
The MSDN documentation gives a high level overview of HTTP compression but doesn't talk about getting the changes into the metabase. I found some instructions and a helpful metabase example.
Related
I have a Silverlight project getting data from an IIS 7.0 server via WCF web services. The data returned is usually large, so compression seemed like a good option. However, for the life of me, I can't get it to work.
Here's what I tried so far
Enabled compression (dynamic and static) for all mime types (/). Verified that it works (a hit on an aspx page returns gzipped data as per fiddler)
Did a whole lot of digging around on WCF and compression. I read something along the lines of WCF 4.5 having something to enable / disable gzip. I'm not sure if this means that IIS 7.0 dynamic compression cannot be used, or if its something unrelated.
Also got a few examples on using GZipEncoder (from Microsoft WCF Samples)
And here's what I'd like to find out
With Silverlight reading data from WCF hosted on an IIS 7.0 server
with .NET 4.0, is it possible to turn on compression for the XML
responses by simply messing around with the Web.Config /
applicationHost.Config?
If not, what is the easiest way to get it to work (say, add a dll, change my Web.Config and done!)
Thanks folks!
Edit: Thanks for all the answers folks. Just one quick note - if someone can confirm that it does not work for WCF 4.0 "or" works with WCF 4.0 only if you do this, that'd help.
We've got GZip compression working for WCF, I'll try to backtrack what we did to get it working. There are a few gotcha's which might bite you trying to get this to work (personally I'm moving trying to move away from WCF wherever possible).
Firstly you need to have IIS Dynamic Compression installed. Secondly you must use browser http in the Silverlight app (which is the default in browser, but not when running OOB) since the build-in http stack doesn't support GZip compression.
You can force this in the Application_Startup() function (change http to https if required).
WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.BrowserHttp);
The gotcha here is that you will only ever get generic errors in your client when a webservice call fails because the browser stack doesn't pass the content of an http 500 response on to Silverlight. Is this is an issue for you it can be worked around with a custom MessageInspector which changes the response code to 200 always.
In your web.config you need to enable dynamic compression
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="true" />
On top of that you need to have the mime type registered in IIS, we added this to the applicationHost.config for WCF with binary message encoding.
<add mimeType="application/soap+msbin1" enabled="true" />
If your not using binary message encoding you probably need application/soap+xml instead here. If I recall correctly these are all the steps needed.
The last gotcha though, it doesn't help when your client is sending large messages since there is no way (afaik) to make silverlight actually send gzip compressed requests to the server, so your only gain will be on the data send by the server.
There are several options for compression with WCF over HTTP. Each have their advantages and disadvantages.
IIS dynamic compression
This is compression on the HTTP layer, and is the most performant, since it runs at the lowest level. It is also the most standard, thus will work with other web technologies easily.
Unfortunately the main disadvantage is that it was based on old web technology (HTTP) where there was the old belief that upstream data is limited and only downstream payload is worth compressing. Therefore upstream data isn't compressed.
Message Compression
Starting with .net 4.5 the message encoders have a new property on MessageEncoder to allow you to enable compression. This is done on the .net layer, and thus is much slower than IIS compression. It is also proprietorial and thus can be difficult to use with non-dot-net technologies. This tech is not availible for SilverLight.
Does IIS Compression (IIS 6.0) work with SSL? I haven't been able to find any definitive articles on the subject. If it does, are there any additional set up instructions that need to be taken besides what Microsoft has explained on TechNet?
Yes, it does. Compression is applied first and then encryption (SSL).
Our site uses IIS 6 compression and SSL:
https://www.httpwatch.com/
Nothing special has to be done. SSL and compression are separately configured.
I've been reading the documentation on IIS settings, and haven't been able to find much on the MSDN site. I'm trying to figure out the preferred settings for a WCF REST service hosted in IIS6. Main goals of these settings should be reliability, restarting the service when needed, and max throughput.
My service will use some processing power as its converting back and forth from XML, of course. Suggestions, or suggested URLs to read?
Thanks.
I've started to find some answers to my own question. I'll post everything I find here.
Internet Information Services Hosting Best Practices
System.ServiceModel namespace
serviceHostingEnvironment
How to do away with the .svc file
I'm using Weblogic application server and Apache web server in my J2EE environment and planning to implement gzip compression of response.
Not sure, whether to implement compression on the Apache server or on the weblogic.
Unless you have a very good reason to not do so, you want to put the load of compression on the web servers since the app servers are already busy at doing other things. To use mod_weblogic together with mod_deflate, have a look at this post.
Depends whether you want the headers to be handled by apache or by the app server. You need to set the encoding type and content length headers to use gzip compression for http. Apache may be more potentially optimised for it.
Is it possible to use GZip compression on the ouput of files that have been created using server side includes in IIS 6? If so how?
If IIS can't do this internally, you can do it with reverse proxy techniques. Basically, the app runs on the server doing the SSI, but outsiders talk to your proxy server which does compression, and gives you a chance to do other clever things, like caching.