2 Stimmen

Wie komprimiere ich nahtlos die Daten, die ich mit C# und IIS in ein Formular eingebe?

Ich muss eine Schnittstelle zu einem leicht veralteten System herstellen, das keine Webservices verwendet. Um Daten an dieses System zu senden, muss ich ein XML-Dokument in eine Formular auf der Website des anderen Systems. Dieses XML-Dokument kann sehr groß werden, so dass ich es gerne komprimieren würde. Das andere System läuft auf IIS, und ich verwende C# auf meiner Seite. Ich könnte natürlich etwas implementieren, das die Daten vor der Veröffentlichung komprimiert, aber dazu müsste das andere System geändert werden, damit es die Daten dekomprimieren kann. Ich möchte es vermeiden, das andere System zu ändern, da es nicht in meinem Besitz ist.

Ich habe gehört, vage Dinge über die Aktivierung der Kompression / http 1.1 in IIS und den Browser, aber ich habe keine Ahnung, wie man das zu meinem Programm zu übersetzen. Grundsätzlich gibt es irgendeine Eigenschaft, die ich in meinem Programm einstellen kann, die mein Programm automatisch die Daten komprimieren lässt, die es an IIS sendet und für IIS, um es nahtlos zu dekomprimieren, so dass die empfangende App nicht einmal den Unterschied kennt?

Hier ist ein Beispielcode, um grob zu zeigen, was ich tue;

private static void demo()
    {

        Stream myRequestStream = null;
        Stream myResponseStream = null;

        HttpWebRequest myWebRequest = (HttpWebRequest)System.Net
                              .WebRequest.Create("http://example.com");
        byte[] bytMessage = null;
        bytMessage = Encoding.ASCII.GetBytes("data=xyz");
        myWebRequest.ContentLength = bytMessage.Length;
        myWebRequest.Method = "POST";

        // Set the content type as form so that the data
        // will be posted as form              
        myWebRequest.ContentType = "application/x-www-form-urlencoded";

        //Get Stream object 
        myRequestStream = myWebRequest.GetRequestStream();

        //Writes a sequence of bytes to the current stream    
        myRequestStream.Write(bytMessage, 0, bytMessage.Length);

        //Close stream
        myRequestStream.Close();

        WebResponse myWebResponse = myWebRequest.GetResponse();
        myResponseStream = myWebResponse.GetResponseStream();
}

"data=xyz" wird in Wirklichkeit zu "data=[ein mehrere MB großes XML-Dokument]".

Ich bin mir bewusst, dass diese Frage letztendlich unter das Banner der Nicht-Programmierung fallen könnte, wenn dies mit nicht-programmatischen Mitteln erreicht werden kann, daher entschuldige ich mich im Voraus.

2voto

VVS Punkte 18907

Ich sehe keine Möglichkeit, die Daten auf einer Seite zu komprimieren und sie auf der anderen Seite unkomprimiert zu empfangen, ohne die Daten aktiv zu dekomprimieren.

0voto

tvanfosson Punkte 506878

Keine Ahnung, ob das funktioniert, da alle Beispiele, die ich finden konnte, zum Herunterladen waren, aber Sie könnten versuchen, die Daten mit gzip zu komprimieren und dann den Content-Encoding-Header der ausgehenden Nachricht auf gzip . Ich glaube, dass die Länge die Länge der gezippten Nachricht sein sollte, obwohl Sie vielleicht mit der Länge der unverschlüsselten Nachricht spielen sollten, wenn das nicht funktioniert.

Viel Glück!

EDITAR Ich denke, die Frage ist, ob der ISAPI-Filter, der die Komprimierung unterstützt, jemals/immer/konfigurierbar beim Hochladen aufgerufen wird. Ich konnte keine Antwort darauf finden, daher vermute ich, dass die Antwort "nie" lautet, aber Sie werden es nicht wissen, bis Sie es versuchen (oder die Antwort finden, die mir entgangen ist).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X