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?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage