я столкнулся и ошибка
Схемы аутентификации, настроенные на хосте («Анонимный»), не позволяют использовать схемы, настроенные для привязки «WebHttpBinding» («Basi c»).
Проблема возникает, когда я запускаю Службу в VS.
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.6" />
<httpRuntime targetFramework="4.6"/>
</system.web>
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" />
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceX_Behavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="ServiceX.CustomUserNamePasswordValidator, ServiceX"/>
</serviceCredentials>
<!--<serviceAuthenticationManager authenticationSchemes="Basic"/>-->
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webHttpBinding_Behavior">
<webHttp helpEnabled="true"/>
</behavior>
</endpointBehaviors>
</behaviors>
<!--<protocolMapping>
<add binding="basicHttpBinding" scheme="http" />
</protocolMapping>-->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<service name="ServiceX.ServiceX" behaviorConfiguration="ServiceX_Behavior">
<endpoint address="" binding="webHttpBinding" contract="ServiceX.IServiceX" behaviorConfiguration="webHttpBinding_Behavior" />
<endpoint address="soap" binding="basicHttpBinding" contract="ServiceX.IServiceX" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
Когда я работаю в IIS, все работает нормально. Когда я запускаю консольное приложение, оно работает весело. В чем разница с VS? Следующее работает нормально, так же, как описанный выше config
Uri serviceUri = new Uri("http://localhost/TestService");
ServiceHost serviceHost = new ServiceHost(typeof(TestService), serviceUri);
BasicHttpBinding basicHttp = new BasicHttpBinding();
serviceHost.AddServiceEndpoint(typeof(IService), basicHttp, "soap");
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
serviceHost.Description.Behaviors.Add(behavior);
serviceHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
var contract = ContractDescription.GetContract(typeof(IService));
contract.Namespace = "WCFServer";
var webHttpEndpoint = new WebHttpEndpoint(contract);
webHttpEndpoint.Address = new EndpointAddress(serviceUri);
var webHttpBinding = (WebHttpBinding)webHttpEndpoint.Binding;
webHttpBinding.Security.Mode = WebHttpSecurityMode.TransportCredentialOnly;
webHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
serviceHost.AddServiceEndpoint(webHttpEndpoint);
//serviceHost.Authentication.AuthenticationSchemes = AuthenticationSchemes.Basic;
serviceHost.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
serviceHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new CustomUserNameAuthentication();
foreach (var bh in serviceHost.Description.Behaviors)
{
var serviceMetadata = bh as ServiceMetadataBehavior;
if (serviceMetadata != null)
{
serviceMetadata.HttpGetEnabled = true;
}
var serviceDebug = bh as ServiceDebugBehavior;
if (serviceDebug != null)
{
serviceDebug.IncludeExceptionDetailInFaults = false;
}
}
serviceHost.Open();
Console.ReadLine();
serviceHost.Close();
В ISS Basi c Аутентификация и анонимная аутентификация разрешены
IN VS Анонимная аутентификация включена
Как происходит в Visual Studio веб-проект WCF не работает, консольный проект и развернутый в IIS веб-приложение работают нормально. В чем разница?
Я хочу реализовать аутентификацию Basi c в WCF