Ich habe einige Probleme bei der Verwendung der einfachen Authentifizierung mit einem einfachen Wcf-Testdienst. Ich erhalte eine Ausnahme:
Der angeforderte Dienst 'http://qld-tgower/test/Service.svc' konnte nicht aktiviert werden. Weitere Informationen finden Sie in den Diagnose-Trace-Protokollen des > Servers.
Und im Trace-Log wird angezeigt:
Die auf dem Host konfigurierten Authentifizierungsschemata ("Basic") lassen die für die Bindung "BasicHttpBinding" konfigurierten Schemata nicht zu ("Anonymous"). Bitte stellen Sie sicher, dass der SecurityMode auf Transport oder TransportCredentialOnly eingestellt ist. Zusätzlich kann dies durch Ändern der Authentifizierungsschemata für diese Anwendung über das IIS-Verwaltungstool, über die Eigenschaft ServiceHost.Authentication.AuthenticationSchemes, in der Anwendungskonfigurationsdatei am Element <serviceAuthenticationManager>, durch Aktualisieren der Eigenschaft ClientCredentialType auf der Bindung oder durch Anpassen der Eigenschaft AuthenticationScheme auf dem HttpTransportBindingElement behoben werden.
Aber was ich nicht verstehe, wenn ich den falschen Benutzernamen und das falsche Passwort eingebe, heißt es IS mit einfacher Authentifizierung?
Die HTTP-Anfrage ist mit dem Client-Authentifizierungsschema "Basic" nicht autorisiert. Der vom Server empfangene Authentifizierungs-Header war 'Basic realm="qld-tgower"'.
Dies sind die Details meiner 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>
und dies ist meine 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>
meine Testanwendung
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);
}
Und mein Dienst
public class Service : IService
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}
Gibt es etwas, das ich hier übersehe?