Возникли проблемы при использовании обычной аутентификации с простым тестовым сервисом Wcf. Я получаю исключение:
Запрошенная служба 'http://qld -tgower / test / Service.svc' не может быть активирована. См.> Журналы диагностической трассировки сервера для получения дополнительной информации.
А в журнале трассировки он показывает:
Схемы проверки подлинности, настроенные на хосте («Basic»), не допускают схемы, настроенные на привязке «BasicHttpBinding» («Anonymous»). Убедитесь, что для SecurityMode установлено значение Transport или TransportCredentialOnly. Кроме того, это может быть решено путем изменения схем аутентификации для этого приложения с помощью инструмента управления IIS через свойство ServiceHost.Authentication.AuthenticationSchemes в файле конфигурации приложения в элементе путем обновления свойства ClientCredentialType в привязке, или путем настройки свойства AuthenticationScheme в HttpTransportBindingElement.
Но что я не понимаю, когда я использую неправильное имя пользователя и пароль, которые он говорит IS с использованием обычной аутентификации?
HTTP-запрос не авторизован с помощью схемы аутентификации клиента «Basic». Заголовок аутентификации, полученный от сервера, был 'Basic realm = "qld-tgower"'.
Это мои данные 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>
и это мой 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>
мое тестовое приложение
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);
}
И мой сервис
public class Service : IService
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}
Есть что-то, чего мне здесь не хватает?