Solicitud doble al realizar una llamada de REST POX utilizando WCF con WebHttpBinding establecido en Autenticación básica

Tener un problema al realizar una llamada de REST POX usando WCF con WebHttpBinding establecido en Autenticación básica (HttpClientCredentialType.Basic)

En lugar de una llamada del cliente con "Autorización: Básica" especificada en el encabezado HTTP, se realizan dos llamadas. Primera llamada sin autenticación a la que responde el servicio con 401 Error no autorizado, segunda llamada con información de autenticación adecuada.

Esto parece ser manejado por el servicio WCF sin ningún problema en absoluto. Llamar a servicios de terceros obviamente crea un problema, ya que responden con un error de inmediato.

Código de servicio:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare,
        RequestFormat = WebMessageFormat.Xml,
        UriTemplate = "")]
    Message SendData(Message message);

}

public class Service : IService
{
    public Message SendData(Message message)
    {           return Message.CreateMessage(MessageVersion.None, String.Empty, "test");
    }
}

Codigo del cliente:

public class Client: WebChannelFactory<IService>, IService
{
    public Client(Uri baseUri, string userName, string password)
        : base(CreateBinding(),
               baseUri)
    {
        Credentials.UserName.UserName = userName;
        Credentials.UserName.Password = password;
    }

    public Message SendData(Message requestMessage)
    {
        var channel = CreateChannel();
        Message responseMessage = channel.SendData(requestMessage);
        return responseMessage;
    }

    private static Binding CreateBinding()
    {
        var binding = new WebHttpBinding();
        binding.Security.Mode = WebHttpSecurityMode.TransportCredentialOnly;
        binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
        return binding;
    }

}

Al usar TcpTrace, estoy viendo esto para las solicitudes en forma consecutiva:

POST / HTTP/1.1  
Content-Type: application/xml; charset=utf-8  
VsDebuggerCausalityData:   uIDPo2lH6p+lUOdFmrqDKGWYeQkAAAAA7+Y4QR6wNUWZmwCaasMx7xrfcJZxph9NocstwCh8NQsACQAA  
Host: localhost:9090  
Content-Length: 89  
Expect: 100-continue  
Connection: Keep-Alive  

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">test request</string>  

POST / HTTP/1.1  
Content-Type: application/xml; charset=utf-8  
VsDebuggerCausalityData: uIDPo2lH6p+lUOdFmrqDKGWYeQkAAAAA7+Y4QR6wNUWZmwCaasMx7xrfcJZxph9NocstwCh8NQsACQAA  
Authorization: Basic dGVzdDp0ZXN0  
Host: localhost:9090  
Content-Length: 89  
Expect: 100-continue  

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">test request</string> 

Tenga en cuenta que solo la segunda llamada contiene:Autorización: Basic dGVzdDp0ZXN0 ¿Cómo detener la primera solicitud (sin autorización) a realizar?

La solución de muestra con la utilidad TcpTrace se puede descargar aquí:

WCF-BasicAuthenticationIssue.zip

Respuestas a la pregunta(2)

Su respuesta a la pregunta