2009-11-13 19 views
4

Salut J'ai besoin de servir à partir d'un fichier compressé ASHX GZ. Dans le code, je l'ai déjà la chaîne en clair:Générer et servir gz compressé dans ASP.NET

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(); 
} 

maintenant et je dois

Toute aide ?

+0

Nous ne génère pas de fichiers à la demande, mais plutôt sur un calendrier. Étant donné que notre carte du site contient près d'un million d'URL, ces données sont parfois très nombreuses. Nous compressons le contenu lorsque nous générons les fichiers, puis stockons les fichiers sur un cdn à être servi par le front-end quand il est demandé. –

Répondre

4

Vous pourriez enable compression au niveau IIS pour un répertoire spécifique. Je crois que ce sera plus efficace que de le faire à la main dans le gestionnaire générique.


MISE À JOUR:

Vous pouvez utiliser GZipStream pour compresser le fichier XML directement à Thew flux de réponse:

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); 
    } 
} 
+0

le client a besoin de recevoir un fichier zippé gz. Je ne veux pas gzip le message HTTP – Robert

+0

merci! Ça semble fonctionner! – Robert

+0

Ce n'est pas l'en-tête correct pour cette application, c'est pourquoi vous avez reçu un fichier gzippé. Le type de contenu doit toujours être text/xml ou application/xml L'en-tête Content-Encoding doit être ajouté et défini sur gzip. – AaronM