在 XML 中获取 SOAP 请求和响应

本文关键字:请求 求和 响应 SOAP 获取 XML | 更新日期: 2023-09-27 18:34:47

我们正在与 UPS 货件 API 合作,我们面临着某些问题。在联系 UPS 技术支持后,他们要求向他们提供 xml 格式的 SOAP 信封(请求/回复(。

请协助如何从代码中获取。以下是对 UPS API 的服务调用。

ShipmentResponse shipmentReponse =
                     shipService.ProcessShipment(shipmentRequest);

任何帮助表示赞赏。

在 XML 中获取 SOAP 请求和响应

如果要

从程序本身执行此操作,可以添加终结点行为(假设使用的是 WCF(来保存 SOAP 请求和响应。

用法是这样的,

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,您的关键方法是AfterReceiveReplyBeforeSendRequest,您可以根据需要在其中存储或保存 SOAP xml。

// 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
    }
}