我遇到了一个艰难的情况,即托管在 IBM HTTP Server (IHS) 上的 Java Web 服务端点需要一个 Content-Length 标头,尽管它应该符合 HTTP/1.1。如果我发送标题,一切正常。如果我离开它,我会收到一个 500 错误响应,通知我我的 POST 实体主体是空的(即使它不是)。
我们为这些服务(由第三方开发)在 WCF 客户端上投入了大量时间,但我似乎找不到将 Content-Length 标头附加到请求的好方法。我可以使用 IClientMessageInspector 向请求添加任意标头(即 X-Dan-Lynn-Header),如博客文章中所述,但 WCF 似乎忽略了 Content-Length 标头。
我的选择是:
a) 找出如何强制 WCF 将 Content-Length 标头附加到 HTTP POST 请求,或者,
b) 找到或编写一个极其简单但透明的 HTTP 代理,用 Content-Length 标头装饰请求。
谢谢!
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", …Run Code Online (Sandbox Code Playgroud)