Expose webHttpBinding-Endpunkt in einem WCF-Dienst
Ich habe einen WCF-Dienst erstellt und drei Endpunkte verfügbar gemacht, nämlich basicHttpBinding, wsHttpBinding und webHttpBinding. Dies ist ein Testdienst für meine Experimente mit WCF. Wenn ich jedoch mithilfe der SVC-Datei einen Dienstverweis hinzufüge, erhalte ich nur zwei (Basis- und WS-) Endpunkte. Es scheint keinen dritten (webHttpBidning) Endpunkt zu geben, der aus irgendeinem Grund verfügbar gemacht wird.
Um dieses Problem zu reproduzieren, erstellen Sie ein WCF-Anwendungsprojekt, löschen Sie den Dienst "Service1", fügen Sie ein neues Element hinzu> "WCF-Dienst" mit dem Namen "TestService" und ändern Sie die Konfigurationsdatei wie folgt:
<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>
Hier ist der Code für 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; }
}
und für TestService.svc
public class TestService : ITestService
{
public bool ValidateUser(User user)
{
if (user.UserName == "User" && user.Password == "123")
{
return true;
}
return false;
}
}
Ich habe eine andere Kombination von WebInvoke-Parametern und WebGet-Parametern ausprobiert, bin jedoch fehlgeschlagen.
Kann mir jemand sagen, warum der dritte Endpunkt nicht in der WSDL-Datei angezeigt wird?