Nous avons une application Web hébergée sur un environnement d'hébergement tiers. L'application serveur expose certains services WCF RESTFUL à nos applications iPad..NET 4.5 et Compression de requête WCF
Les services WCF sont .svc-less et sont enregistrés dans le fichier Glonbal.asax. Exemple:
RouteTable.Routes.Add("service name", new ServiceRoute("url",
new WebServiceHostFactory(), routingServiceContract));
Depuis que nous avons besoin de transférer des données massives de nos applications iPad à l'application serveur, certaines des demandes sont compressées par gzip avant d'être envoyé au service WCF. Et depuis l'application serveur a été initialement construit sur la base .NET 3.5 un morceau de code comme celui-ci a été en charge décomprimer les requsts comprimé:
public void Application_BeginRequest(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(Request.Headers["Content-Encoding"]))
{
if (Request.Headers["Content-Encoding"].ToLower().Contains("gzip"))
Request.Filter = new GZipStream(Request.Filter, CompressionMode.Decompress);
if (Request.Headers["Content-Encoding"].ToLower().Contains("deflate"))
Request.Filter = new DeflateStream(Request.Filter, CompressionMode.Decompress);
}
}
Ce travaillait jusqu'à ce que notre fournisseur d'hébergement installé 4.5 .NET sur leur serveur . Ensuite, les requêtes JSON compressées ont commencé à échouer (nous obtenons des erreurs http 400 ou parfois 500). Après tant d'enquête, il s'est avéré que le code et le fichier web.config sont tous OK parce que le service WCF fonctionne parfaitement sur un serveur qui n'a pas .NET 4.5 installé.
J'ai même commenté le code ci-dessus et publié sur le même serveur, mais cela n'a pas fonctionné à nouveau. J'avais pensé que la demande était décodée deux fois!
Maintenant, je me demande comment puis-je tirer parti de la fonction de compression intégrée WCF 4.5 et faire fonctionner ce site Web? Je préfère me débarrasser du code C# personnalisé et utiliser la fonction de compression WCF 4.5.
p.s. le service Web s'exécute en mode de compatibilité ASP.NET.
p.p.s. le service Web fonctionne parfaitement si nous ne compressons pas la requête http.
Quelques questions: (1) S'agit-il d'une application 3.5 ou 4.0? Une application 3.5 peut ne pas être affectée par l'installation de 4.5 car 4.5 est une mise à jour à 4.0. (2) Voyez-vous que les appels aboutissent si vous commentez votre code de compression et envoyez des requêtes non compressées? (3) Pourriez-vous poster votre web.config et un peu de repro pour nous? Je suis intéressé à voir comment les paramètres de liaison ressemble. – Praburaj
1- Il s'agit d'une application .NET 4.0 et ASP.NET MVC 3.0. 2- Non, si nous commenter le code de compression ça ne va pas aider. Si nous conservons le code de compression et construisons le site, copiez le même site web pré-compilé sur un serveur qui a .NET 4.0 (pas 4.5) cela fonctionne. 3- Je vais essayer d'afficher le fichier web.config ici. J'ai besoin de demander la permission au grand patron :) – Aref
@Praburaj - Pour clarifier, envoyer des requêtes _uncompressed_ avec le code de compression désactivé (ou activé d'ailleurs) fonctionne comme prévu. –