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();
}