![](/img/trans.png)
[英]Trace/Log SOAP XML Request and Response AND HTTP status code from SOAP .Net Client App
[英]how to trace soap xml as a webservice client in netcore?
下面的代碼是使用 vs. 自動生成的。
[System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
[System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(response))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(request))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(product[]))]
System.Threading.Tasks.Task<PartnerService.cancelOrderResponse> cancelOrderAsync(PartnerService.cancelOrderRequest1 request);
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
System.Threading.Tasks.Task<PartnerService.cancelOrderResponse> PartnerService.PartnerServicePortType.cancelOrderAsync(PartnerService.cancelOrderRequest1 request)
{
return base.Channel.cancelOrderAsync(request);
}
netcore 中沒有soapExtensionAttribute 類。 它只存在於網絡框架中。 所以我不知道 netcore 中的屬性是什么。
創建兩個類文件
public class InspectorBehavior : IEndpointBehavior
{
public string LastRequestXML
{
get
{
return myMessageInspector.LastRequestXML;
}
}
public string LastResponseXML
{
get
{
return myMessageInspector.LastResponseXML;
}
}
public int TimeSpan {
get {
return myMessageInspector.TimeSpan;
}
}
public int ResponseCode { get { return myMessageInspector.ResponseCode; } }
public string URL { get { return myMessageInspector.URL; } }
private MyMessageInspector myMessageInspector = new MyMessageInspector();
public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
}
public void Validate(ServiceEndpoint endpoint)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.ClientMessageInspectors.Add(myMessageInspector);
}
}
public class MyMessageInspector : IClientMessageInspector
{
public string LastRequestXML { get; private set; }
public string LastResponseXML { get; private set; }
public int TimeSpan { get; private set; }
public int ResponseCode { get; private set; }
public string URL { get; private set; }
private Stopwatch stopwatch { get; set; }
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
stopwatch.Stop();
LastResponseXML = reply.ToString();
this.TimeSpan = (int)stopwatch.Elapsed.TotalSeconds;
}
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
LastRequestXML = request.ToString();
URL = channel.RemoteAddress.Uri.AbsoluteUri;
stopwatch = new Stopwatch();
stopwatch.Start();
return request;
}
}
當客戶打電話
var requestInterceptor = new InspectorBehavior();
this.soapClient.Endpoint.EndpointBehaviors.Add(requestInterceptor);
await this.soapClient.cancelOrderAsync(...);
Console.WriteLine(requestInsterceptor.LastRequestXML);
Console.WriteLine(requestInsterceptor.LastResponseXML);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.