Как перехватить заголовки от клиента WCF ...? - PullRequest
2 голосов
/ 05 января 2012

Итак, я использовал wsdl, предоставленный мне, чтобы сгенерировать весь мой базовый клиентский код для WCF. Когда я пытаюсь связаться с сервисом, я получаю сообщение об ошибке. Ошибка говорит о том, что тип содержимого привязки не совпадает с типом ответного сообщения.

После запуска Fiddler я посмотрел на исходные данные, которые выходили и возвращались. Оказывается, сервер Magento, с которым я пытаюсь поговорить, возвращает два значения Content-Type. Опять же, используя Fiddler, я принудительно ответил своему клиенту только с одним Content-Type, и он работал просто отлично.

Теперь мне бы хотелось, чтобы сервер Magento отвечал правильно, поскольку это было бы "правильным" решением этой проблемы. Однако это вне моего контроля (другая компания, которая не хочет это исправлять). Итак, мне нужно перехватить заголовки, когда WCF их получит, и игнорировать дубликаты. Пройдя некоторое время в поисках сетей, я все еще пытаюсь найти «лучший» способ сделать это. Или "любой" способ сделать это, в этом отношении.

Кто-нибудь может указать мне правильную вещь для переопределения и что мне нужно сделать, чтобы удалить лишний тип контента?

1 Ответ

4 голосов
/ 05 января 2012

Вы должны иметь возможность реализовать IClientMessageInspector для манипулирования и удаления лишнего Content-Type в ответе, полученном от сервера Magento в методе AfterReceiveReply.

РЕДАКТИРОВАТЬ:

Таким образом, вы можете получить доступ к заголовкам HTTP в полученном ответе через HttpResponseMessageProperty, который доступен в

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"];
    }
}

однако, СодержимоеТип выглядит как ограниченный заголовок .Возможно, небольшое размышление может решить проблему, но, надеюсь, это даст вам некоторые идеи.

...