Komprimiere eine HttpWebRequest mit gzip

Ich entwickle ein.NET 4.0 Konsolenanwendung alsSOAP Web Service client, der Daten (POST) an Dritte weiterleitet. Ich habe keine Kontrolle über den Webservice auf der Serverseite. Der Drittanbieter hat @ bereitgestellWSDL's verwenden, und ich konnte sie importieren und mit vertretbarem Erfolg verwenden. Es ist jedoch erforderlich, die Anforderungsnachricht mit @ zu komprimieregzip, und ich konnte nicht für das Leben von mir herausfinden, wie das mit den Proxy-Diensten zu tun ist.

Dieses Them hier auf SO, führte mich zu der Annahme, dass die Anforderung nicht komprimiert werden kann, ohne die Kontrolle über den Client- und den Servercode zu haben. Aufgrund dieser Erkenntnis habe ich den Code in meine Anwendung geschrieben, um das @ manuell zu erstelleSOAP XML in einemXDocument Objekt; Dann füllte die Werte aus demWSDL Proxy-Klassenobjekte, für deren Verwendung ich zuvor meine Client-Anwendung codiert hatte.

Die erste Anforderung für diesen Client besteht darin, die Nachricht komprimiert über @ zu sendegzip. Nach einigen Recherchen habe ich Antworten gesehen, die so einfach wie das Hinzufügen des @ sinHttpRequestHeader.AcceptEncoding, "gzip, deflate" zum Anfragekopf. Leider schien das nicht zu funktionieren.

Zurzeit ist das Zertifikat, das ich abrufe, nicht das echte Zertifikat. Ich versuche, den Code so gut wie möglich zu machen, bevor ich ihn in einer Testumgebung bereitstelle, um die eigentlichen Servicetests durchzuführen.

Gibt es eine Möglichkeit, die Anfrage über den Proxy-Aufruf zu komprimieren wsdl)? Gibt es etwas, das mir fehlt, um das @ richtig zu komprimiereHttpWebRequest?Kann noch etwas schief gehen, was dazu führen würde, dass die Fehlermeldung zurückgegeben wird?
Ich würde erwarten, dass eine andere Nachricht bezüglich der Authentifizierung ungültig ist, wenn die Anforderung selbst in Ordnung ist.ibt es eine Möglichkeit, wie die Komprimierung über das @ erfolgen kanapp.config?

Die nächsten Anforderungen Ich bin ein wenig verwirrt, wie ich damit umgehen soll / was ich tun soll. Unter der Annahme, dass ich das @ gesetzt haContentType der Anfrage an, wie (und was) füge ich hinzu, um das @ hinzuzufügcontent-transfer-encoding stück zur Anfrage? Wenn dasContentType ist falsch, wie soll ich diese Informationen auch hinzufügen?

Der Inhaltstyp für den SOAP Evenlope mit MTOM-codiertem Anhang muss "application / xop + xml" und die Inhaltsübertragungscodierung muss 8-Bit sein.

Ich habe einige Iterationen des folgenden Codes durchgearbeitet, glaube jedoch, dass die relevanten Snippets der Code in seiner einfachsten Form sind. Bitte lassen Sie mich wissen, wenn andere Informationen hilfreich sind.

Methode zum Erstellen des HttpWebRequest:

private static HttpWebRequest CreateWebRequest(SoapAction action)
{
    string url = GetUrlAddress(action);

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

    request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
    request.Headers.Add("SOAPAction", action.ToString());
    request.ContentType = "application/xop+xml";
    request.Accept = "text/xml";
    request.Method = "POST";

    request.ClientCertificates.Add(/* Retrieve X509Certificate Object*/);

    return request;
}

Code zum Senden der Anfrage:

using (Stream stream = request.GetRequestStream())
{
    soapXml.Save(stream);
}

Code zum Abrufen der Antwort:
So rufe ich die auftretende Fehlermeldung ab

try
{
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        using (StreamReader reader = new StreamReader(response, Encoding.Default))
        {
            File.AppendAllText(filePath, response.Headers.ToString());
            File.AppendAllText(filePath, reader.ReadToEnd());
        }
    }
}
catch (WebException ex)
{
    using (var stream = ex.Response.GetResponseStream())
    {
        using (var reader = new StreamReader(stream))
        {
            Console.WriteLine(reader.ReadToEnd());
        }
    }
}

Error Nachricht wird empfangen:

Die Anforderungsnachricht muss mit HTTP-Komprimierung (RFC 1952 - GZIP) gesendet werden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage