Pour une application Web ASP.NET 4.0 / IIS7, je souhaite prendre en charge les demandes HTTP Quelqu'un est-il connu comment j'abandonne un tel comportement? p>
PS: En ce qui concerne, j'ai de multiples points de terminaison de repos et de savon, et il ressort une meilleure solution pour supporter la compression au niveau HTTP plutôt que des codeurs personnalisés pour chaque point d'extrémité. P> Content-coding: gzip code> dans les en-têtes de la demande et compressez le corps en conséquence. P>
3 Réponses :
Pour ceux qui pourraient être intéressés, la mise en œuvre est assez simple avec un Mise à jour: forte > Il semble que cette approche déclenche un problème dans WCF, car WCF s'appuie sur l'original ihttpmodule code> qui filtre simplement des demandes entrantes.
longueur de contenu code> et non la valeur obtenue après décompression. P> p>
J'avais l'impression qu'il est possible de configurer la compression au niveau IIS plutôt dans votre application hébergée. Cependant, je ne sais pas grand chose à ce sujet, juste une suggestion Google "Compression IIS"
La compression HTTP classique s'applique uniquement à Réponses B>, voici les demandes b> J'essaie de compresser.
Non, à la fin, nous avons décidé de ré-implémenter notre propre pile HTTP :-(
@Joannesvermorel Essayez la solution de Wiktor ici: Stackoverflow.com/questions/16671216/... (notant mes bugfixes dans ma propre réponse).
Essayez la réponse de Wiktor à ma question similaire ici: p>
... Mais veuillez noter que sa mise en œuvre sur son blog contenait quelques problèmes de bugs / compatibilité, alors essayez ma version patchée de la classe HTTPCompressionModule publiée sur la même page. p>
Bien que Hacky, vous pouvez vous déplacer autour de la WCF à l'aide de l'original longueur de contenu code> même après la décompression de la requête en définissant le champ privé
_ContentLongueur code> dans le
httpecrets code> classe en utilisant la réflexion. Utilisation du code de Joannes Vermorel:
void BeginRequest(object sender, EventArgs e)
{
var app = (HttpApplication)sender;
if ("gzip" == app.Request.Headers["Content-Encoding"])
{
app.Request.Filter = new GZipStream(
app.Request.Filter, CompressionMode.Decompress);
// set private _contentLength field with new content length after the request has been decompressed
var contentLengthProperty = typeof(HttpRequest).GetField("_contentLength", BindingFlags.NonPublic | BindingFlags.Instance);
contentLengthProperty.SetValue(app.Request, (Int32)app.Request.InputStream.Length);
}
}