Asp.net IHTTP模块插入入站筛选器中断WCF,如何调整内容长度?

Asp.net IHTTP模块插入入站筛选器中断WCF,如何调整内容长度?,asp.net,wcf,httpmodule,httprequest,Asp.net,Wcf,Httpmodule,Httprequest,在ASP.NET 4.0中,我有一个IHttpModule,它在HttpRequest.filter上应用一个过滤器。结果,内容流长度被更改,并且由于正文长度和HTTP头之间的不匹配,它中断了WCF,现在返回400个错误请求 你知道如何解决WCF的这种行为吗?猜这是你的问题: 真正需要做的就是删除错误的内容长度标题,但这在IIS6中是不允许的。不确定集成管道模式下的IIS7。对于使用筛选器的任何响应,请将此更新应用于标题。其思想是获取内容类型(这样您就不会中断任何非文本响应)和任何存在的cook

在ASP.NET 4.0中,我有一个
IHttpModule
,它在
HttpRequest.filter
上应用一个过滤器。结果,内容流长度被更改,并且由于正文长度和HTTP头之间的不匹配,它中断了WCF,现在返回
400个错误请求


你知道如何解决WCF的这种行为吗?

猜这是你的问题:


真正需要做的就是删除错误的内容长度标题,但这在IIS6中是不允许的。不确定集成管道模式下的IIS7。对于使用筛选器的任何响应,请将此更新应用于标题。其思想是获取内容类型(这样您就不会中断任何非文本响应)和任何存在的cookie(这样您就不会中断身份验证),清除所有标题(以清除内容长度),然后再次设置内容类型和cookie。我们在HttpApplication.ReleaseRequestState事件中应用过滤器,然后执行以下处理。YMMV

HttpApplication app = (HttpApplication)sender;
string ct = app.Response.ContentType;
HttpCookie[] cookies = new HttpCookie[app.Response.Cookies.Count];
app.Response.Cookies.CopyTo(cookies, 0);

app.Response.ClearHeaders();

app.Response.ContentType = ct;
foreach (HttpCookie cookie in cookies) { app.Response.Cookies.Add(cookie); }

是的,同样的问题。不幸的是,讨论只承认问题,而没有提供解决方案。