получение мыльного запроса и ответа в xml

мы работаем с API доставки UPS, и есть определенные проблемы, с которыми мы сталкиваемся. После обращения в службу технической поддержки UPS они попросили предоставить им SOAP-конверт (Request/Respose) в формате xml.

Пожалуйста, помогите, как это можно получить из кода. ниже приведен сервисный вызов API UPS.

ShipmentResponse shipmentReponse =
                     shipService.ProcessShipment(shipmentRequest);

любая помощь приветствуется.


person Abdul Ali    schedule 21.12.2014    source источник
comment
Я предполагаю, что самым прямым подходом будет wireshark, хотя есть (вероятно) более простой способ.   -  person elyashiv    schedule 21.12.2014


Ответы (1)


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

Использование будет примерно таким,

using (ChannelFactory<IService> scf = new ChannelFactory<IService>(new BasicHttpBinding(), "http://localhost:8000/Soap"))
{
    scf.Endpoint.EndpointBehaviors.Add(new SimpleEndpointBehavior()); // key bit
    IService channel = scf.CreateChannel();

    string s;
    s = channel.EchoWithGet("Hello, world");

    Console.WriteLine("   Output: {0}", s);
}

Здесь подробно описано здесь: http://msdn.microsoft.com/en-us/library/ms733786%28v=vs.110%29.aspx, ключевые методы для вас — AfterReceiveReply и BeforeSendRequest, где вы можете хранить или сохранять XML-файл SOAP по мере необходимости. .

// Client message inspector
public class SimpleMessageInspector : IClientMessageInspector
{
    public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
    {
        // log response xml
        File.WriteAllText(@"c:\temp\responseXml.xml", reply.ToString());
    }

    public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel)
    {
        // log request xml
        File.WriteAllText(@"c:\temp\requestXml.xml", request.ToString());
        return null;
    }
}

public class SimpleEndpointBehavior : IEndpointBehavior
{
    public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
    {
        // No implementation necessary
    }

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

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
    {
        // No implementation necessary
    }

    public void Validate(ServiceEndpoint endpoint)
    {
        // No implementation necessary
    }
}
person steve16351    schedule 21.12.2014
comment
Спасибо за ответ . постараюсь сообщить. Хотя первым приоритетом будет сетевой инспектор, так как он может быть самым простым. Хотя спасибо за старания. это может помочь мне на каком-то этапе - person Abdul Ali; 21.12.2014