Delen via


Gebruik van standaardeindpunten

In het voorbeeld StandardEndpoints ziet u hoe u standaardeindpunten gebruikt in serviceconfiguratiebestanden. Met een standaardeindpunt kan de gebruiker eindpuntdefinities vereenvoudigen met behulp van één eigenschap om een adres, binding en contractcombinatie te beschrijven met aanvullende eigenschappen die eraan zijn gekoppeld. In dit voorbeeld ziet u hoe u een aangepast standaardeindpunt definieert en implementeert en hoe u specifieke eigenschappen in het eindpunt definieert.

Voorbeelddetails

Service-eindpunten kunnen worden opgegeven door drie parameters op te geven: adres, binding en contract. Andere parameters die kunnen worden opgegeven, zijn gedragsconfiguratie, headers, luister-URI, enzovoort. In sommige gevallen hebben een of alle adressen, bindingen en contracten waarden die niet kunnen worden gewijzigd. Daarom is het mogelijk om standaardeindpunten te gebruiken. Enkele voorbeelden van dergelijke eindpunten zijn eindpunten voor het uitwisselen van metagegevens en detectie-eindpunten. Standaardeindpunten verbeteren ook de bruikbaarheid door configuratie van service-eindpunten toe te staan zonder dat ze informatie van een vaste aard hoeven te verstrekken of om hun eigen standaardeindpunten te maken, bijvoorbeeld om de bruikbaarheid te verbeteren door een redelijke set standaardwaarden op te geven en zo de uitgebreidheid van configuratiebestanden te verminderen.

Dit voorbeeld bestaat uit twee projecten: de service die twee standaardeindpunten definieert en de client die communiceert met de service. De manier waarop de standaardeindpunten voor de service in het configuratiebestand worden gedefinieerd, wordt weergegeven in het volgende voorbeeld.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <extensions>
      <endpointExtensions>
        <add name="customEndpoint" type="Microsoft.Samples.StandardEndpoints.CustomEndpointCollectionElement, service" />
      </endpointExtensions>
    </extensions>
    <services>
      <service name="Microsoft.Samples.StandardEndpoints.CalculatorService">
        <endpoint address="http://localhost:8000/Samples/Service.svc/customEndpoint" contract="Microsoft.Samples.StandardEndpoints.ICalculator" kind="customEndpoint" />
        <endpoint kind="mexEndpoint" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <standardEndpoints>
      <customEndpoint>
        <standardEndpoint property="True" />
      </customEndpoint>
    </standardEndpoints>
  </system.serviceModel>
</configuration>

Het eerste eindpunt dat voor de service is gedefinieerd, is van soort customEndpoint, waarvan de definitie kan worden weergegeven in de <standardEndpoints> sectie, waarin de eigenschap property de waarde truekrijgt. Dit is het geval van een eindpunt dat is aangepast met een nieuwe eigenschap. Het tweede eindpunt komt overeen met een eindpunt voor metagegevens, waarin de waarden voor adres, binding en contract worden vastgezet.

Als u het standaardeindpuntelement wilt definiëren, moet er een klasse worden gemaakt die is afgeleid van StandardEndpointElement . In het geval van dit voorbeeld is de CustomEndpointElement klasse gedefinieerd zoals wordt weergegeven in het volgende voorbeeld.

public class CustomEndpointElement : StandardEndpointElement
{
    public bool Property
    {
        get { return (bool)base["property"]; }
        set { base["property"] = value; }
    }

    protected override ConfigurationPropertyCollection Properties
    {
        get
        {
            ConfigurationPropertyCollection properties = base.Properties;
            properties.Add(new ConfigurationProperty("property", typeof(bool), false, ConfigurationPropertyOptions.None));
            return properties;
        }
    }

    protected override Type EndpointType
    {
        get { return typeof(CustomEndpoint); }
    }

    protected override ServiceEndpoint CreateServiceEndpoint(ContractDescription contract)
    {
        return new CustomEndpoint();
    }

    protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
    {
        CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
        customEndpoint.Property = this.Property;
    }

    protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ChannelEndpointElement channelEndpointElement)
    {
        CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
        customEndpoint.Property = this.Property;
    }

    protected override void OnInitializeAndValidate(ServiceEndpointElement serviceEndpointElement)
    {
    }

    protected override void OnInitializeAndValidate(ChannelEndpointElement channelEndpointElement)
    {
    }
}

In de CreateServiceEndpoint functie wordt een CustomEndpoint object gemaakt. De definitie wordt weergegeven in het volgende voorbeeld:

public class CustomEndpoint : ServiceEndpoint
{
    public CustomEndpoint()
        : this(string.Empty)
    {
    }

    public CustomEndpoint(string address)
        : this(address, ContractDescription.GetContract(typeof(ICalculator)))
    {
    }

    public CustomEndpoint(string address, ContractDescription contract)
        : base(contract)
    {
        this.Binding = new BasicHttpBinding();
        this.IsSystemEndpoint = false;
    }

    public bool Property
    {
        get;
        set;
    }
}

Als u de communicatie tussen de service en de client wilt uitvoeren, wordt er een servicereferentie gemaakt in de client naar de service. Wanneer het voorbeeld is gebouwd en uitgevoerd, wordt de service uitgevoerd en communiceert de client ermee. Houd er rekening mee dat de servicereferentie moet worden bijgewerkt telkens wanneer er een wijziging in de service is.

Dit voorbeeld gebruiken

  1. Open het StandardEndpoints.sln-bestand met Visual Studio.

  2. Schakel meerdere projecten in om te starten.

    1. Klik in Solution Explorer met de rechtermuisknop op de oplossing Standard Endpoints en selecteer Vervolgens Eigenschappen.

    2. Selecteer in Algemene eigenschappen het opstartproject en klik vervolgens op Meerdere opstartprojecten.

    3. Verplaats het serviceproject naar het begin van de lijst, met de actie ingesteld op Starten.

    4. Verplaats het clientproject na het serviceproject, ook met de actie ingesteld op Starten.

      Hiermee geeft u op dat het clientproject wordt uitgevoerd na het serviceproject.

  3. Druk op F5 om de oplossing uit te voeren.

Notitie

Als deze stappen niet werken, controleert u of uw omgeving correct is ingesteld met behulp van de volgende stappen:

  1. Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
  2. Volg de instructies in Het bouwen van de Windows Communication Foundation-voorbeelden om de oplossing te bouwen.
  3. Als u het voorbeeld wilt uitvoeren in een of meer computerconfiguraties, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.