Comprima una HttpWebRequest usando gzip

Estoy desarrollando un.NET 4.0 Aplicación de consola para servir comoSOAP Web Service cliente que enviará datos (POST) a un tercero. No tengo control sobre el servicio web en el lado del servidor. El tercero proporcionóWSDL's usar, y pude importarlos y usarlos con un éxito razonable. Sin embargo, existe un requisito para comprimir el mensaje de solicitud utilizandogzip, y por mi vida no pude averiguar cómo hacerlo usando los servicios proxy.

Este tema aquí en SO, me hizo creer que sin tener control sobre el código del cliente y del servidor, la solicitud no se puede comprimir. Como resultado de este hallazgo, escribí el código en mi aplicación para crear manualmente elSOAP XML en unXDocument objeto; luego, rellenó los valores de laWSDL objetos de clase proxy que previamente había codificado para que utilizara mi aplicación cliente.

El primer requisito para este cliente es enviar el mensaje comprimido a través degzip. Después de un poco de investigación, he visto respuestas tan simples como solo agregar elHttpRequestHeader.AcceptEncoding, "gzip, deflate" al encabezado de la solicitud. Desafortunadamente, hacer eso no pareció funcionar.

Actualmente, el certificado que estoy recuperando no es el certificado real. Estoy tratando de hacer que el código sea lo más sólido posible antes de implementarlo en un entorno de prueba para realizar las pruebas de servicio reales.

¿Hay alguna manera de comprimir la solicitud a través de la llamada proxy (wsdl)?¿Hay algo que me falta para comprimir correctamente elHttpWebRequest?¿Podría haber algo más que salga mal y que se devuelva el mensaje de error?
Esperaría que un mensaje diferente relacionado con la autenticación no sea válido si la solicitud en sí misma fuera correcta.¿Hay alguna manera de que la compresión se pueda hacer a través deapp.config?

El siguiente conjunto de requisitos estoy un poco confundido sobre cómo manejar / qué hacer. Bajo el supuesto de que lo que he establecido elContentType de la solicitud a, cómo (y qué) agrego para agregar elcontent-transfer-encoding pieza a la solicitud? Si elContentType es incorrecto, ¿cómo debo agregar esta información también?

El tipo de contenido para el SOAP Evenlope con archivo adjunto codificado MTOM debe ser "application / xop + xml" y la codificación de transferencia de contenido debe ser de 8 bits.

He pasado por algunas iteraciones del código a continuación, sin embargo, creo que los fragmentos relevantes son el código en su forma más simple. Avíseme si hay otra información que pueda ser útil.

Método para crear 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;
}

Código para enviar solicitud:

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

Código para recuperar la respuesta:
Así es como estoy recuperando el mensaje de error que está ocurriendo

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());
        }
    }
}

Mensaje de error recibido:

El mensaje de solicitud debe enviarse mediante compresión HTTP (RFC 1952 - GZIP).

Respuestas a la pregunta(2)

Su respuesta a la pregunta