Как я просматриваю полный ответ SOAP (включая заголовок) на входящих ответах на Сервисную Ссылку в c#?

У меня есть простое консольное приложение c# 3.5.Net, которое сцепляется до сервисной ссылки. Все хорошо работает - совершение звонков и получение ответов, но теперь мне сказали посмотреть на заголовок Мыла в сообщении, это возвращается.

Я нашел.Net WebService Studio, который является довольно потрясающим и покажет и запрос Мыла и ответ Мыла.

Для ответа это показывает что-то вроде этого:

ResponseCode: 200 (OK)
Content-Language:en-US
Content-Length:30048
Content-Type:text/xml; charset=utf-8
Date:Mon, 25 Jan 2010 19:57:47 GMT
Server:WebSphere Application Server/6.1

<?xml version="1.0" encoding="utf-16"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header />
  <soapenv:Body>

Как я могу генерировать что-то подобное в своем приложении?

Ответ, на который я интересуюсь взглядом, для другого метода, который возвращает достаточно большое сообщение для аварийного завершения WebService Studio. Я не вижу, как установить параметры размера сообщения с помощью этого инструмента. Так, я хочу просто получить эту информацию сам.

Какие-либо идеи о том, как я могу сделать это?

6
задан Tad Donaghe 25 January 2010 в 20:26
поделиться

1 ответ

WCF имеет трассировку через файл конфигурации , или вы можете реализовать поведение для регистрации сообщения самостоятельно.

Добавьте поведение, подобное это:

Service1SoapClient client = new Service1SoapClient();
client.Endpoint.Behaviors.Add( new MessageInspectionBehavior());
client.HelloWorld();

и код:

class MessageInspectionBehavior : IClientMessageInspector, IEndpointBehavior
{
    public void Validate(ServiceEndpoint endpoint)
    {
    }

    public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
    {
    }

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
    {
    }

    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
    {
        clientRuntime.MessageInspectors.Add(this);
    }

    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        //Write request message
        Console.WriteLine(request.ToString());
        return null;
    }

    public void AfterReceiveReply(ref Message reply, object correlationState)
    {
        // Write out http headers
        foreach (var property in reply.Properties)
        {
            if (!(property.Value is HttpResponseMessageProperty)) continue;
            var httpProperties = (HttpResponseMessageProperty)property.Value;
            foreach (KeyValuePair<object, object> kvp in httpProperties.Headers)
            {
                Console.WriteLine(kvp.Key + ":" + kvp.Value);
            }
        }
        // Write result message
        Console.WriteLine(reply.ToString());
    }
}

Аналогично вы можете написать регистратор на сервисной стороне с IDISPATSMessageInsPector и ISERVICEBICHAVIOR.

7
ответ дан 16 December 2019 в 21:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: