Это довольно ужасный нестандартный способ. Он использует пользовательские заголовки HTTP, поэтому вы не можете ожидать, что встроенный механизм WCF волшебным образом поддержит такой подход. Как WCF узнает, что вы хотите добавить нестандартный HTTP-заголовок в HTTP-запрос (не SOAP-заголовок)?
Используйте это:
var proxy = new YourServiceClient();
using (var scope = new OperationContextScope(proxy.InnerChannel))
{
var prop = new HttpRequestMessageProperty();
prop.Headers.Add("UserName", "Hello");
prop.Headers.Add("Password", "World");
OperationContext context = OperationContext.Current;
context.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = prop;
proxy.CallYourOperation();
}