Creé un servicio WCF y expuse tres puntos finales que son basicHttpBinding, wsHttpBinding y webHttpBinding. Este es un servicio de prueba para mis experimentos con WCF. Pero, cada vez que agrego una referencia de servicio usando el archivo .svc, solo obtengo dos puntos finales (básicos y ws). No parece haber un tercer extremo (webHttpBidning) expuesto por alguna razón.Exponer punto final webHttpBinding en un servicio WCF
Para reproducir este problema, cree un proyecto de aplicación WCF, elimine el servicio Service1, en Agregar nuevo elemento> servicio WCF llamado TestService, y cambiar el archivo de configuración a lo siguiente:
<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>
Aquí el 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; }
}
y para TestService.svc
public class TestService : ITestService
{
public bool ValidateUser(User user)
{
if (user.UserName == "User" && user.Password == "123")
{
return true;
}
return false;
}
}
Probé una combinación diferente de los parámetros de WebInvoke y los parámetros de WebGet, pero fallaron.
¿Alguien puede decirme por qué el tercer punto final no se muestra en el archivo WSDL?
Entonces, ¿cómo sabe un cliente qué métodos/tipos están expuestos cuando solo hay un extremo que usa webHttpBinding? – decyclone
Realmente no sé (cómo jQuery transfiere los metadatos). Podría ser otra pregunta. –
@decyclone: consulte la respuesta a su pregunta de seguimiento a continuación. – BillVo