tags:

views:

170

answers:

2

Hi I need to serve from a ASHX a GZ compressed file. In the code I already have the string in clear:

public void ProcessRequest(HttpContext context)
{
    // this is the code without compression
    HttpRequest Request = context.Request;
    HttpResponse Response = context.Response;

    Response.ContentEncoding = Encoding.UTF8;
    Response.ContentType = "text/xml";

    // this is the string to compress and send to the client
    string xml = GenerateXml();

    Response.Write(output);
    Response.End();
}

Now and I need to

Any help?

A: 

GZip compression is supported in ASP.NET. A quick Google resulted in these posts which seem to help:

http://west-wind.com/WebLog/posts/10294.aspx - doing GZip
http://www.west-wind.com/Weblog/posts/10564.aspx - returning the result

Adam Pope
Near the solution, thanks. I need to serve a application/x-gzip file - not sure on how to proceed
Robert
A: 

You could enable compression at IIS level for a specific directory. I believe this will be more efficient than doing it by hand in the generic handler.


UPDATE:

You could use GZipStream to compress the xml directly to thew response stream:

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "application/x-gzip";
    var xml = "<xml/>";
    using (var gzipStream = new GZipStream(context.Response.OutputStream, CompressionMode.Compress))
    {
        var buffer = Encoding.UTF8.GetBytes(xml);
        gzipStream.Write(buffer, 0, buffer.Length);
    }
}
Darin Dimitrov
the client need to received a gz zipped file. I don't want to gzip the HTTP message
Robert
thanks! Seems to work!
Robert