Problemas para utilizar la autenticación básica con un servicio Wcf de prueba simple. Obtengo una excepción:Wcf Autenticación básica
El servicio solicitado, 'http: //qld-tgower/test/Service.svc' no se pudo activar. Consulte los registros de seguimiento de diagnóstico del servidor para obtener más información.
Y en el Registro de seguimiento se muestra:
Los esquemas de autenticación configurados en el host ('Básico') no permiten que los configurados en el 'BasicHttpBinding' vinculante ('Anónimo'). Asegúrese de que SecurityMode esté configurado en Transport o TransportCredentialOnly. Además, esto puede resolverse cambiando los esquemas de autenticación para esta aplicación a través de la herramienta de administración IIS, a través de la propiedad ServiceHost.Authentication.AuthenticationSchemes, en el archivo de configuración de la aplicación en el elemento <serviceAuthenticationManager>, actualizando la propiedad ClientCredentialType en el enlace. o ajustando la propiedad AuthenticationScheme en HttpTransportBindingElement.
Pero lo que yo no entiendo cuando nosotros el nombre de usuario y la contraseña incorrecta que dice que ES mediante la autenticación básica?
La solicitud de HTTP no está autorizada con el esquema de autenticación de cliente 'Básico'. El encabezado de autenticación recibido del servidor era 'Basic realm = "qld-tgower"'.
Esto es más detalles web.config
<system.serviceModel>
<services>
<service name="WcfService"
behaviorConfiguration="Behavior">
<endpoint address="http://QLD-TGOWER/test/Service.svc"
binding="basicHttpBinding"
bindingConfiguration="httpBinding"
contract="IService" />
</service>
</services>
<diagnostics>
<endToEndTracing activityTracing="false" messageFlowTracing="true" propagateActivity="true"></endToEndTracing>
</diagnostics>
<bindings>
<basicHttpBinding>
<binding name="httpBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" proxyCredentialType="Basic">
</transport>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
y este es mi App.config
<system.serviceModel>
<diagnostics>
<endToEndTracing activityTracing="true" />
<messageLogging logMessagesAtTransportLevel="true" />
</diagnostics>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService" >
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" proxyCredentialType="Basic"></transport>
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://QLD-TGOWER/test/Service.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService" contract="ServiceReference1.IService"
name="BasicHttpBinding_IService" />
</client>
</system.serviceModel>
mi aplicación de prueba
private static void Main(string[] args)
{
var proxy = new ServiceClient("BasicHttpBinding_IService");
var clientCredentials = proxy.ClientCredentials;
clientCredentials.UserName.UserName = "username";
clientCredentials.UserName.Password = "password";
var res = proxy.GetData(1);
Console.WriteLine(res);
Console.WriteLine("Done");
Console.ReadKey(true);
}
Y mi servicio
public class Service : IService
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}
¿Hay algo que me falta aquí?
Gracias, Eso ha solucionado los errores de autenticación, pero ahora el servicio simplemente entra en estado de falla. No hay nada en los registros de seguimiento para indicar por qué. – TheRealTy