第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在調(diào)用 Web 服務(wù)時,是否有一種簡單的方法來獲取請求的 soap 消息和響應(yīng)的 soap 消息?

在調(diào)用 Web 服務(wù)時,是否有一種簡單的方法來獲取請求的 soap 消息和響應(yīng)的 soap 消息?

C#
慕尼黑的夜晚無繁華 2022-12-31 13:38:34
我想調(diào)用一個 Web 服務(wù),我想獲取請求和響應(yīng)對象作為肥皂消息。var response = client.invoke(parameter);我想以某種方式發(fā)送消息并接收消息。
查看完整描述

1 回答

?
DIEA

TA貢獻1820條經(jīng)驗 獲得超3個贊

基于來自 Carlos Figueira 的 MSDN 文章WCF Extensibility – Message Inspectors,一種選擇是使用 MessageInspector。

創(chuàng)建一個實現(xiàn)EndBehaviorClientMessageInspector的類。緩沖請求和回復(fù)消息,以便稍后使用它們。在這個例子中,我在控制臺中打印它們。

這是組合的實現(xiàn):

// using System.ServiceModel.Description;

// using System.ServiceModel.Dispatcher;

// using System.ServiceModel.Channels;

// using System.ServiceModel

public class InspectBehaviorAndnspector : IEndpointBehavior, IClientMessageInspector

{


    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)

    {

        clientRuntime.MessageInspectors.Add(this);

    }


    public MessageBuffer RequestBuffer;

    public MessageBuffer ReplyBuffer;


    public void AfterReceiveReply(ref Message reply, object correlationState){

       // messages are read only

       ReplyBuffer = reply.CreateBufferedCopy(2048);

       // so recreate the message after it was buffered

       reply = ReplyBuffer.CreateMessage();

    }


    public object BeforeSendRequest(ref Message request, IClientChannel channel){

       // messages are read only

       RequestBuffer = request.CreateBufferedCopy(2048);

       // so recreate the message after it was buffered

       request = RequestBuffer.CreateMessage();

       return "42";

    }


    // not needed for client

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)

    {

    }


    public void Validate(ServiceEndpoint sep) 

    {

    }

    public void AddBindingParameters(ServiceEndpoint sep, BindingParameterCollection bpc)

    {

    }

}

現(xiàn)在在您的client實例上,假設(shè)它源自ClientBase,您可以執(zhí)行以下操作:


var inspector = new InspectBehaviorAndnspector();

client.Endpoint.Behaviors.Add(inspector);


// this is your call

var response = client.invoke(parameter);


// either do a ToString

Console.WriteLine(inspector.RequestBuffer.CreateMessage().ToString());

// or Write it with XmlWriter

var sb = new StringBuilder();

using(var xw = XmlWriter.Create(sb, new XmlWriterSettings {Indent =true})) {

    inspector.ReplyBuffer.CreateMessage().WriteMessage(xw);

}

Console.WriteLine(sb.ToString());

我在一個帶有添加服務(wù)的例子中運行了這個,這是我的結(jié)果:


<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">

  <s:Header>

    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/ISelfHostTest/Add</Action>

  </s:Header>

  <s:Body>

    <Add xmlns="http://tempuri.org/">

      <x>3</x>

      <y>2</y>

    </Add>

  </s:Body>

</s:Envelope>


<?xml version="1.0" encoding="utf-16"?>

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">

  <s:Body>

    <AddResponse xmlns="http://tempuri.org/">

      <AddResult>5</AddResult>

    </AddResponse>

  </s:Body>

</s:Envelope>


查看完整回答
反對 回復(fù) 2022-12-31
  • 1 回答
  • 0 關(guān)注
  • 76 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號