0

I'm trying to modify the value of a:To addressing header element. a:To element is not available in BeforeSendRequest of ClientMessageInspector.

If I add it in BeforeSendRequest, then it is overridden with the endpoint.

var toHeader = MessageHeader.CreateHeader("To", "http://www.w3.org/2005/08/addressing", "https://toHeaderValue", true);
request.Headers.Add(toHeader);

I'm here using the CustomBinding with Soap version 1.1 and Addressing version 10

        {
            HttpTransportBindingElement bindingElement;
            var binding = new CustomBinding
            {
                Name = "*******",
                OpenTimeout = TimeSpan.FromMinutes(10),
                CloseTimeout = TimeSpan.FromMinutes(10),
                SendTimeout = TimeSpan.FromMinutes(10),
                ReceiveTimeout = TimeSpan.FromMinutes(10)
            };
            binding.Elements.Add(new TextMessageEncodingBindingElement
            {
                MessageVersion =
                    MessageVersion.CreateVersion(EnvelopeVersion.Soap11,
                        AddressingVersion.WSAddressing10),
                WriteEncoding = Encoding.UTF8
            });

            bindingElement = GetBindingElement(url);

            bindingElement.ManualAddressing = false;
            bindingElement.MaxReceivedMessageSize = 20000000;
            bindingElement.AllowCookies = false;
            bindingElement.BypassProxyOnLocal = false;
            bindingElement.MaxBufferSize = 20000000;
            bindingElement.TransferMode = TransferMode.Buffered;
            bindingElement.AuthenticationScheme = AuthenticationSchemes.Anonymous;
            bindingElement.ProxyAuthenticationScheme = AuthenticationSchemes.Anonymous;
            bindingElement.UseDefaultWebProxy = true;

            binding.Elements.Add(bindingElement);

            return binding;
        }

        private HttpTransportBindingElement GetBindingElement(string url)
        {
            if (Uri.TryCreate(url, UriKind.Absolute, out var uriResult) && uriResult.Scheme == Uri.UriSchemeHttp)
                return new HttpTransportBindingElement();
            else
                return new HttpsTransportBindingElement();
        }
Arjun
  • 1

1 Answers1

0

Maybe the solution is set this:

var endpoint = new EndpointAddress
(
    new Uri("a to address"),
    new DnsEndpointIdentity("endpoint identity"),
    new AddressHeaderCollection()
);

And set the value to header:

client.Endpoint.Behaviors.Add(new ClientViaBehavior(new Uri("address")));

Hope it helps.

Jiayao
  • 510
  • 3
  • 7