IHttpModule not getting called

Put simply, is there any reason why an IHttpModule would not get called for requests for script files?  My module is set to gzip compress all JSON responses, and also all script files.  It works perfectly locally, but when I deploy it to my shared hosting account, it **only works for the JSON responses**.

Is there some IIS setting that they might have to cause requests for these files to bypass my HttpModule somehow?

Thanks!
ARACK04Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

ARACK04Author Commented:
Also, here's the complete code for my module:
using System;
using System.IO;
using System.IO.Compression;
using System.Globalization;
using System.Web;
 
 
public class JsonCompressionModule : IHttpModule {
    public JsonCompressionModule() {
    }
 
    public void Dispose() {
    }
 
    public void Init(HttpApplication app) {
        app.PreRequestHandlerExecute += new EventHandler(Compress);
    }
 
    private void Compress(object sender, EventArgs e) {
        HttpApplication app = (HttpApplication)sender;
        HttpRequest request = app.Request;
        HttpResponse response = app.Response;
 
        if (request.ContentType.ToLower(CultureInfo.InvariantCulture).StartsWith("application/json") ||
            request.Url.ToString().Contains(".js")) {
 
            if (!((request.Browser.IsBrowser("IE")) && (request.Browser.MajorVersion <= 6))) {
                string acceptEncoding = request.Headers["Accept-Encoding"];
 
                if (!string.IsNullOrEmpty(acceptEncoding)) {
                    acceptEncoding = acceptEncoding.ToLower(CultureInfo.InvariantCulture);
 
                    if (acceptEncoding.Contains("gzip")) {
                        response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
                        response.AddHeader("Content-encoding", "gzip");
                    } else if (acceptEncoding.Contains("deflate")) {
                        response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
                        response.AddHeader("Content-encoding", "deflate");
                    }
                }
            }
        }
    }
}

Open in new window

0
crazymanCommented:
Script files are static content, and wont be mapped in iis to the asp.net runtime, therefore the request will never hit asp.net let alone your HttpModule.

You may append .js.aspx and they will come through asp.net but you will need to work your handler into mapping that to the correct phyical file...
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
crazymanCommented:
This window in IIS controls what file extensions map to what, you can add to these as you wish.
IIS.gif
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

ARACK04Author Commented:
Genius, thanks!

Why did it work in localhost though?  Are requests through localhost not capable of knowing what's static, and just send everything through the ASP.NET runtime?
0
ARACK04Author Commented:
Instead of .js.aspx, couldn't I just add .js to the extensions handled by .NET directly?  Also, if I did that, would it still work for requests with a querystring added on, like

foo.js?ver=1.6    

I would assume so since requests like that still work for .aspx files.

Thanks for putting up with this simple (probably stupid) question!
0
crazymanCommented:
It works on localhost because the development server in visual studio routes all traffic through the runtime.

You could indeed map .js to asp.net and handle them there.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Networking

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.