如何拦截WCF客户端的头文件?

时间:2012-01-04 22:34:46

标签: c# wcf magento header content-type

所以,我使用了为我提供的wsdl为WCF生成所有基本客户端代码。当我尝试与服务通信时,我收到错误。该错误表示绑定的内容类型与响应消息的内容类型不匹配。

在解雇Fiddler之后,我查看了原始数据并将其返回。事实证明,我试图与之交谈的Magento服务器返回两个Content-Type值。再一次,使用Fiddler,我只用一个Content-Type强制响应我的客户端,它运行得很好。

现在,我只想让Magento服务器正确响应,因为这将是解决此问题的“正确”方法。但是,这是我无法控制的(不同的公司不想修复它)。因此,我需要在WCF获取它们时拦截标头并让它忽略重复。在搜索了互联网一段时间之后,我仍然试图找出这种“最好”的方式。或者“任何”这样做的方式,就此而言。

任何人都能指出我正确的事情来覆盖以及我需要做些什么才能删除多余的内容类型?

1 个答案:

答案 0 :(得分:4)

您应该能够在AfterReceiveReply方法中实现IClientMessageInspector来操纵和删除从Magento Server收到的响应中多余的Content-Type。

修改

因此,您可以通过

中提供的HttpResponseMessageProperty访问收到的回复中的HTTP标头
void IClientMessageInspector.AfterReceiveReply(ref Message reply, Object correlationState)
{
    var prop = 
        reply.Properties[HttpResponseMessageProperty.Name] as HttpResponseMessageProperty;

    if (prop != null)
    {
        // get the content type headers
        var contentType = prop.Headers["Content-Type"];
    }
}

然而, Content-Type appears to be a restricted header 。也许有点反思可能解决这个问题,但希望这会给你一些想法。