HTTP-Header mit WCF-Inhaltslänge für ausgehende Nachricht

Ich bin in einer schwierigen Situation, in der ein Java-Webdienst-Endpunkt, der auf einem IBM HTTP-Server (IHS) gehostet wird, einen Content-Length-Header erfordert, obwohl er angeblich HTTP / 1.1 entspricht. Wenn ich den Header sende, funktioniert alles. Wenn ich es auslasse, erhalte ich eine 500-Fehler-Antwort, die mich darüber informiert, dass mein POST-Entitätskörper leer war (obwohl dies nicht der Fall war).

Wir haben viel Zeit in unseren WCF-Client für diese Dienste investiert (von einem Drittanbieter entwickelt), und ich kann anscheinend keinen guten Weg finden, der Anfrage einen Content-Length-Header hinzuzufügen. Ich kann der Anfrage beliebige Header (d. H. X-Dan-Lynn-Header) hinzufügen, indem ich einen IClientMessageInspector verwende, wie in beschriebenBlog-Posts wie diese, aber WCF scheint einen Content-Length-Header zu ignorieren.

Meine Optionen sind:

a) herauszufinden, wie WCF gezwungen wird, einen Content-Length-Header an die HTTP-POST-Anforderung anzuhängen, oder

b) Suchen oder Schreiben eines äußerst einfachen und dennoch transparenten HTTP-Proxys, der die Anforderung mit einem Content-Length-Header ausstattet.

Vielen Dank!

Beispiel für IClientMessageInspector.BeforeSendRequest:

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
    var buffer = request.CreateBufferedCopy(Int32.MaxValue);
    var tempRequest = buffer.CreateMessage();


    HttpRequestMessageProperty httpRequest = GetHttpRequestProp(tempRequest);
    if (httpRequest != null)
    {
        if (string.IsNullOrEmpty(httpRequest.Headers[HttpRequestHeader.ContentLength]))
        {
            httpRequest.Headers.Add(HttpRequestHeader.ContentLength, GetMessageLength(buffer).ToString());
            httpRequest.Headers.Add("X-Dan-Lynn-Header", "abcdefghijk");
        }

    }

    request = tempRequest;
    request.Properties[HttpRequestMessageProperty.Name] = httpRequest;

    return null;
}

Von WCF (und dem vorhergehenden IClientMessageInspector) generierte Beispielanforderung:
POST /path/to/service HTTP/1.1
Content-Type: text/xml; charset=utf-8
X-Dan-Lynn-Header: abcdefghijk
SOAPAction: "http://tempuri.org/path/to/service/action"
Host: service.host.tld
Transfer-Encoding: chunked
Connection: Keep-Alive


<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        .......body removed for clarity......

    </s:Body>
</s:Envelope>

Antworten auf die Frage(3)

Ihre Antwort auf die Frage