| 

.NET C# Java Javascript Exception

2
Hallo

Kann ich die Komprimierung der Daten die an den Client geschickt werden im Code ausschalten?
Problem: Die Gegenstelle ist ein PHP Teil. Die scheint irgend wie mit der Komprimierung auf die Schnautze zu fallen.
Die Daten werden wie folgt aufbereitet.

HttpContext.Current.Response.Clear();
StringBuilder sb = new StringBuilder();
sb.Append(@"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes"" ?>");
//noch mehr sb.Append()
HttpContext.Current.Response.Write(sb.ToString());
HttpContext.Current.Response.End();

Ziel wäre es die Daten umkomprimiert zu übertragen. Aber nur hier. Sonst nicht. Das Web ist auf einem Shared Hosting. Da kann ich am IIS nichts ändern.

PS: Ist der Ansatz die Daten so zu schicken überhaupt korrekt? Abgesehen davon das man das XML wahrscheinlich kleverer aufbauen könnte als ich es hier mache.

Nachtrag:
Mir wurde gerade gesagt, dass es mit gzip keine Probleme gäbe. Nur wenn die Daten per deflate kommen. Ich müsste also nur das Senden als gzip erzwingen können.
28.10.2009
GENiALi 2,5k 1 2 8
GENiALi 2,5k 1 2 8
1
"Die scheint irgend wie mit der Komprimierung auf die Schnautze zu fallen." -> Genauer bitte: Was macht denn PHP? Per CURL Deinen Dienst aufrufen?
DaSpors 28.10.2009
Werde das am Abend nachreichen. Im Büro habe ich die Infos leider nicht.
GENiALi 29.10.2009
Reicht das? :-)

Warning: gzuncompress(): data error in /usr/local/ZendFramework-1.0.2/library/Zend/Http/Response.php on line 601
GENiALi 29.10.2009
1 Antwort
2
Hmm,
also falls du einen IIS 7 nutzt, ist es möglich eine web.config in dein Verzeichnis zu legen. In dieser kannst du Einstellungen am IIS vornehmen. Im Fall der Kompression sogar Ordner bezogen d.h. wenn dein Projekt in einem Unterordner ist und dort auch die web.config liegt, dann gilt die Einstellung auch nur für den Unterordner (dein Projekt).
Web.Config
<configuration>
<system.webServer>
<urlCompression doDynamicCompression="true" DoStaticCompression="true" />
</system.webServer>
</configuration>


Andererseits bräuchtest du nur die Komprimiermethode im Quelltext angeben...
GZipStream gzip = new GZipStream(HttpContext.Current.Response.OutputStream, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-Encoding", "gzip");


Grüßle
29.10.2009
Scout 1,4k 2 8
Scout 1,4k 2 8
Das mit dem GZipStream habe ich in zwischen auch irgend wie gemacht. Es steht aber noch nicht fest ob das auch funktioniert. Sollte sich aber heute Abend zeigen.
GENiALi 29.10.2009
Mein Code sieht jetzt so aus.

HttpResponse response = HttpContext.Current.Response;
Stream filter = response.Filter;
response.Filter = new GZipStream(filter, CompressionMode.Compress);
response.AppendHeader("Content-Encoding", "gzip");
response.Cache.VaryByHeaders["Accept-Encoding"] = true;
response.ClearContent();
response.Write(sb.ToString());
response.End();

Allerdings kann ich dann das Resultat nicht mehr begutachten. Im IE und FF kommen nur noch Sonderzeichen.
GENiALi 29.10.2009
OK. Ich habe jetzt eine Methode gemacht die mir alles gzip schickt. Allerdings weiss ich noch nicht ob es wirklich schon alles war. Im IE und FF kann man das Resultat nicht mehr lesen.

private static void SendContent(StringBuilder sb)
{
HttpResponse response = HttpContext.Current.Response;
Stream filter = response.Filter;
response.Filter = new GZipStream(filter, CompressionMode.Compress);
response.AppendHeader("Content-Encoding", "gzip");
response.Cache.VaryByHeaders["Accept-Encoding"] = true;
response.ClearContent();
response.Write(sb.ToString());
response.End();
}
GENiALi 31.10.2009

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH