Как получить значения заголовка из инспектора сообщений клиента в WCF - PullRequest
1 голос
/ 03 августа 2011

Я создаю веб-тестовый клиент для некоторых служб, над которыми я работаю, и как часть требований для этого я хотел бы иметь возможность отображать полные сообщения SOAP с запросами и ответами (и заголовки HTTP дляuser).

Я реализовал класс MessageInspector, реализующий IClientMessageInspector , прежде всего методы BeforeSendRequest и AfterReceiveReply для получения доступа к сообщениям запроса и ответа соответственно.

Захват ответа (AfterReceiveReply) прекрасно работает, но перехват запроса работает только частично.Я могу получить доступ к большей части сообщения, однако заголовок SOAP и заголовки HTTP оба пусты.Просматривая запрос в Fiddler, я вижу, что WCF отправляет заголовок Security в сообщении SOAP и «кучу» заголовков HTTP.

Мой BeforeSendRequest метод очень прост ... суть егоis ...

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{  
    this.RequestMessage = request.ToString(); // Security header is missing from message

    // Try to get HTTP headers
    object req; // req is always null
    if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out req))
    {
        this.RequestHeaders = ((HttpRequestMessageProperty)req).Headers;
    }

    return null;
}

Я не уверен, почему отсутствуют заголовки HTTP и Security.Есть ли лучший способ сделать это?

  • Уэйн

1 Ответ

6 голосов
/ 03 августа 2011

Инспекторы просматривают сообщения сразу после того, как сообщение существует в средствах форматирования, и до того, как оно достигнет любого из протокольных каналов (например, безопасности), который (потенциально) изменит сообщение перед его передачей (см. Диаграмму в постео каналах WCF на http://blogs.msdn.com/b/carlosfigueira/archive/2011/07/12/wcf-extensibility-channels.aspx). Таким образом, на уровне инспектора вы не сможете найти дополнительные заголовки SOAP, добавленные сообщением. Заголовки HTTP добавляются транспортом, который также достигается после прохождения сообщения черезИнспектор сообщений.

Если вы хотите увидеть все заголовки SOAP в сообщении, вы можете либо создать новый «протоколный» канал (пример в http://msdn.microsoft.com/en-us/library/ms751495.aspx делает именно это), либо новое сообщениекодировщик (он может обернуть существующий кодировщик и проверить исходящие сообщения непосредственно перед тем, как они будут закодированы).

Увидеть заголовки HTTP сложнее, поскольку транспорт - последняя часть, через которую сообщениепроходит в WCF. Я думаю, вы могли бы написать собственный транспортный канал, чтобы сделать это,но это определенно будет много кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...