Problemi nell'utilizzo dell'autenticazione di base con un semplice servizio di verifica Wcf. Ricevo un'eccezione:Wcf Autenticazione di base
Il servizio richiesto, "http: //qld-tgower/test/Service.svc" non può essere attivato. Consulta i log di traccia diagnostica> del server per ulteriori informazioni.
E nel Registro di traccia si vede:
Gli schemi di autenticazione configurati sull'host ('base') non consentono quelli configurati sul legame 'BasicHttpBinding' ('Anonimo'). Assicurarsi che SecurityMode sia impostato su Transport o TransportCredentialOnly. Inoltre, ciò può essere risolto modificando gli schemi di autenticazione per questa applicazione tramite lo strumento di gestione IIS, tramite la proprietà ServiceHost.Authentication.AuthenticationSchemes, nel file di configurazione dell'applicazione nell'elemento <serviceAuthenticationManager>, aggiornando la proprietà ClientCredentialType sul bind, o regolando la proprietà AuthenticationScheme su HttpTransportBindingElement.
Ma quello che don capisco quando noi il nome utente e la password non corretta si dice che IS utilizzando l'autenticazione di base?
La richiesta HTTP non è autorizzata con lo schema di autenticazione client 'Base'. L'intestazione di autenticazione ricevuta dal server era 'Basic realm = "qld-tgower"'.
Questo è il mio dettagli 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>
e questo è il mio 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>
la mia applicazione di test
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);
}
E il mio servizio
public class Service : IService
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}
C'è qualcosa che mi manca qui?
Grazie, Questo ha corretto gli errori di autenticazione, ma ora il servizio va nello stato di errore. Non c'è nulla nei registri di traccia per indicare il motivo. – TheRealTy