Expor o ponto de extremidade webHttpBinding em um serviço WCF
Criei um serviço WCF e expus três pontos de extremidade, que são basicHttpBinding, wsHttpBinding e webHttpBinding. Este é um serviço de teste para minhas experiências com o WCF. Mas, sempre que adiciono referência de serviço usando o arquivo .svc, recebo apenas dois pontos de extremidade (básico e ws). Parece não haver um terceiro ponto de extremidade (webHttpBidning) exposto por algum motivo.
Para reproduzir esse problema, crie um projeto de aplicativo WCF, exclua o serviço Service1, adicione um novo item> Serviço WCF chamado TestService e altere o arquivo de configuração para o seguinte:
<system.serviceModel>
<services>
<service name="WcfTestService.TestService" behaviorConfiguration="TestServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost/WcfTestService/TestService.svc"/>
</baseAddresses>
</host>
<endpoint address="basic"
binding="basicHttpBinding"
contract="WcfTestService.ITestService" />
<endpoint address="ws"
binding="wsHttpBinding"
contract="WcfTestService.ITestService" />
<endpoint address="web"
binding="webHttpBinding"
contract="WcfTestService.ITestService" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="TestServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
Aqui está o código para ITestService.cs:
[ServiceContract]
public interface ITestService
{
[OperationContract]
[WebInvoke]
Boolean ValidateUser(User user);
}
[DataContract]
public class User
{
[DataMember(Name = "Name")]
public String UserName { get; set; }
[DataMember]
public String Password { get; set; }
}
e para TestService.svc
public class TestService : ITestService
{
public bool ValidateUser(User user)
{
if (user.UserName == "User" && user.Password == "123")
{
return true;
}
return false;
}
}
Tentei uma combinação diferente de parâmetros WebInvoke e WebGet, mas falhei.
Alguém pode me dizer por que o terceiro ponto de extremidade não está aparecendo no arquivo WSDL?