2011-01-13 4 views
1

Comment compresser les données de sortie d'un service Web (méthode Web). La sortie est de type XmlDocument.Compression de réponse ASP.NET WebService

Voici le code.

[WebMethod] 
public XmlDocument GetPersonalInfo(int CustomerID) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.LoadXml(new CustomersXML().GetPersonalInfo(CustomerID)); 
    return doc; 
} 

Comment Gzip cette réponse. S'il vous plaît rappelez-vous que ce n'est pas une page (appel HTTP) c'est un service Web qui est appelé à partir d'un client Flex.

Merci

Répondre

0

Je n'ai pas le temps de chercher le code, mais il y a un espace de noms System.IO.Compression qui a plusieurs classes pour les Gzip et les systèmes de compression à base dégonflage. Gzip est probablement un pari plus sûr pour la communication inter-langues car je ne suis pas certain de la façon dont la compression de déflation est répandue.

Cependant, vous ne devriez avoir aucun problème dans la communication tant qu'il y a un en-tête avec le paquet SOAP indiquant au serveur client de décompresser le flux.

Remarque: vérifiez bien les paramètres de votre serveur avant de le faire, car certains hôtes ont activé Gzip par défaut et vous ne voulez pas le faire deux fois.

0

Cela n'a rien à voir avec .NET. GZIP est une fonctionnalité HTTP de Web Server - à condition que le client la prenne en charge et notifie généralement le serveur en envoyant GZIP dans les en-têtes ACCEPT lors de l'envoi de la requête.

Vous devez le configurer dans IIS. Selon la version, cela peut être différent. Dans IIS 7, c'est très facile, juste un drapeau à définir. Voir here.

+2

Gzip n'a été introduite en standard par défaut dans IIS7 et est seulement disponible en tant que module dans Apache, donc je ne dirais pas que c'est "rien à voir avec .NET" car cela implique que ce n'est pas quelque chose que vous ne pouvez pas invoquer par programmation. Vous pouvez certainement générer des flux Gzip directement à partir de .NET. Si c'est prudent est une question entièrement distincte. –

1

This answer fait référence à ancient article en expliquant comment implémenter ce programme en utilisant SharpZipLib.

Another answer démontre l'utilisation du System.IO.Compressionclasses qui pourrait être substitué à SharpZipLib.

Rick Strahl a mis en place an article examinant les problèmes potentiels à prendre en compte lors de l'implémentation de la compression qui ne semblent pas être traités dans les exemples fournis ci-dessus. Il renvoie également à an article pour plus de détails sur l'utilisation de la compression intégrée IIS7.

1

aller à votre iis ou tout autre fichier de configuration, et ajoutez la ligne suivante à l'endroit approprié:

<add mimeType="application/json" enabled="true" /> 

j'ai eu le même problème - mon IIS a pu gzip une réponse http, à l'exception réponses JSON (qui, le cas échéant, une compression gzip le plus sur mon application).

espoir qui aide

Mise à jour: le fichier de configuration de l'application hôte doit se trouver ici: % windir% \ System32 \ inetsrv \ config