2016-02-22 62 views
0

我有一個wsdl,有一個方法來發送數據, ,而不是通過這種方法發送我想只是得到如果我使用該方法已經發送的soap字符串。如何使用WSDL方案獲取肥皂字符串

如果有人知道這是否可能或如何這一點, 感謝幫手,

+0

你可以分享樣本的源代碼?。 –

+0

肥皂串是什麼?我假設你想要肥皂信封 –

+0

actualy我不能,是的,我需要肥皂envelpe使用它作爲一個字符串,我添加一個IBM MQ,所以我需要通過MQ發送肥皂。 – Hay

回答

0

我顯然不知道你的架構和基礎設施是什麼樣子的所以下面可能不適用,但它聽起來像可能會有一種「混淆」的責任。而不是在MQ上發佈SOAP有效載荷,最好只發布消費者需要做的事情所需的數據。例如。您將SOAP信封發佈到隊列中,但是如果有另一位消費者也對此消息感興趣呢?它可能不希望它是SOAP格式,而是JSON格式,或者它只是想根據發佈的數據更新數據庫表。我會說,而推動「原始」數據,讓消費者決定什麼用它做...

反正... 一個快速和骯髒的方式來實現這一目標:

MessageInspector:

public class MessageInspector : 
    IClientMessageInspector 
{ 
    public object BeforeSendRequest(ref Message request, IClientChannel channel) 
    { 
     var r = request.ToString(); // this will return the SOAP string... 
     return request; 
    } 

    public void AfterReceiveReply(ref Message reply, object correlationState) 
    { 
     //throw new NotImplementedException(); 
    } 
} 

EndpointBehavior:

public class MessageInspectorBehavior : 
    IEndpointBehavior 
{ 
    public void Validate(ServiceEndpoint endpoint) 
    { 
     //throw new NotImplementedException(); 
    } 

    public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) 
    { 
     //throw new NotImplementedException(); 
    } 

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) 
    { 
     //throw new NotImplementedException(); 
    } 

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

,然後設置客戶端上的行爲:

class Program 
{ 
    static void Main(
     string[] args 
     ) 
    { 
     var ser = new ServiceReference1.Service1Client(); 
     ser.Endpoint 
      .Behaviors 
      .Add(new MessageInspectorBehavior()); 

     var f = ser.GetData(10); 

     Console.WriteLine(f); 
     Console.ReadKey(); 
    } 
} 

這裏是呼叫仍然對服務提出問題......另一種方法是創建SOAP消息手動

也許這將幫助: How to post SOAP Request from .NET?