Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>What makes a difference in SoapUI with "Enable/Disable WS-A addresing" checked or not is a <code>&lt;wsa:Action&gt;</code> tag added by default to the SOAP header.</p> <p>If you use WCF, you can add WS-Addressing headers like specified in <a href="https://stackoverflow.com/questions/9129750/how-do-i-use-ws-addressing-in-wcf-and-set-the-wsareplyto-header">How do I use WS-Addressing in WCF and set the wsa:replyto header?</a> and I would start from adding Action header.</p> <p><strong>EDIT:</strong> Knowing that <code>SoapExtension</code> class is used, here is a complete example of adding <code>WS-Addressing</code> <code>Action</code> header to the request sent by client:</p> <pre><code>public class WebServiceSOAPExtension : SoapExtension { private Stream inwardStream; private Stream outwardStream; public override Stream ChainStream(Stream stream) { outwardStream = stream; inwardStream = new MemoryStream(); return inwardStream; } public override object GetInitializer(Type serviceType) { return null; } public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute) { return null; } public override void Initialize(object initializer) { return; } public override void ProcessMessage(System.Web.Services.Protocols.SoapMessage message) { switch (message.Stage) { case SoapMessageStage.BeforeSerialize: break; case SoapMessageStage.AfterDeserialize: break; case SoapMessageStage.BeforeDeserialize: RewriteResponse(); break; case SoapMessageStage.AfterSerialize: RewriteRequest(); break; } } private void RewriteResponse() { string message; var streamReader = new StreamReader(outwardStream); var streamWriter = new StreamWriter(inwardStream); message = streamReader.ReadToEnd(); streamWriter.Write(message); streamWriter.Flush(); inwardStream.Position = 0; } private void RewriteRequest() { string message; XmlDocument xmlDoc = new XmlDocument(); inwardStream.Position = 0; var streamReader = new StreamReader(inwardStream); var streamWriter = new StreamWriter(outwardStream); message = streamReader.ReadToEnd(); xmlDoc.LoadXml(message); var bodyNode = xmlDoc.GetElementsByTagName("Body", "http://www.w3.org/2003/05/soap-envelope/")[0]; var headerNode = xmlDoc.CreateElement("s", "Header", "http://www.w3.org/2003/05/soap-envelope/"); var actionNode = xmlDoc.CreateElement("wsa", "Action", "http://www.w3.org/2004/12/addressing"); actionNode.InnerText = "http://sampleserver.example/Action"; headerNode.AppendChild(actionNode); bodyNode.ParentNode.InsertBefore(headerNode, bodyNode); message = xmlDoc.InnerXml; streamWriter.Write(message); streamWriter.Flush(); } } </code></pre> <p>This class must be registered in client's web application:</p> <pre><code>&lt;webServices&gt; &lt;soapExtensionTypes&gt; &lt;add type="WebApplication1.WebServiceSOAPExtension, WebApplication1" priority="1" group="Low" /&gt; &lt;/soapExtensionTypes&gt; &lt;/webServices&gt; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload