Delen via


Standaardeindpunten

Eindpunten worden gedefinieerd door een adres, een binding en een contract op te geven. Andere parameters die op een eindpunt kunnen worden ingesteld, zijn onder andere gedragsconfiguratie, headers en listen-URI's. Voor bepaalde typen eindpunten worden deze waarden niet gewijzigd. Metagegevensuitwisselingseindpunten maken bijvoorbeeld altijd gebruik van het IMetadataExchange contract. Andere eindpunten, zoals WebHttpEndpoint altijd een opgegeven eindpuntgedrag vereisen. De bruikbaarheid van een eindpunt kan worden verbeterd door eindpunten met standaardwaarden te gebruiken voor veelgebruikte eindpunteigenschappen. Met standaardeindpunten kan een ontwikkelaar een eindpunt definiëren met standaardwaarden of waarbij de eigenschappen van een of meer eindpunten niet worden gewijzigd. Met deze eindpunten kunt u een dergelijk eindpunt gebruiken zonder dat u gegevens van een statische aard hoeft op te geven. Standaardeindpunten kunnen worden gebruikt voor infrastructuur- en toepassingseindpunten.

Infrastructuureindpunten

Een service kan eindpunten beschikbaar maken met een aantal eigenschappen die niet expliciet door de auteur van de service zijn geïmplementeerd. Het eindpunt voor het uitwisselen van metagegevens maakt bijvoorbeeld het IMetadataExchange contract beschikbaar, maar als serviceauteur implementeert u die interface niet, het wordt geïmplementeerd door WCF. Dergelijke infrastructuureindpunten hebben standaardwaarden voor een of meer eindpunteigenschappen, waarvan sommige mogelijk onveranderlijk zijn. De Contract eigenschap van het eindpunt voor metagegevensuitwisseling moet zijn IMetadataExchange, terwijl andere eigenschappen, zoals binding, kunnen worden opgegeven door de ontwikkelaar. Infrastructuureindpunten worden geïdentificeerd door de IsSystemEndpoint eigenschap in te stellen op true.

Toepassingseindpunten

Toepassingsontwikkelaars kunnen hun eigen standaardeindpunten definiëren die standaardwaarden opgeven voor het adres, de binding of het contract. U definieert een standaardeindpunt door een klasse af te leiden van ServiceEndpoint en de juiste eindpunteigenschappen in te stellen. U kunt standaardwaarden opgeven voor eigenschappen die kunnen worden gewijzigd. Sommige andere eigenschappen hebben statische waarden die niet kunnen worden gewijzigd. In het volgende voorbeeld ziet u hoe u een standaardeindpunt implementeert.

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

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

    // Create the custom endpoint with a fixed binding
    public CustomEndpoint(string address, ContractDescription contract)
        : base(contract)
    {
        this.Binding = new BasicHttpBinding();
        this.IsSystemEndpoint = false;
    }

    // Definition of the additional property of this endpoint
    public bool Property { get; set; }
}

Als u een door de gebruiker gedefinieerd aangepast eindpunt in een configuratiebestand wilt gebruiken, moet u een klasse afleiden van StandardEndpointElement, een klasse afleiden van StandardEndpointCollectionElement<TStandardEndpoint,TEndpointConfiguration>en het nieuwe standaardeindpunt registreren in de sectie extensies in app.config of machine.config. De StandardEndpointElement biedt configuratieondersteuning voor het standaardeindpunt, zoals wordt weergegeven in het volgende voorbeeld.

public class CustomEndpointElement : StandardEndpointElement
{
    // Definition of the additional property for the standard endpoint element
    public bool Property
    {
        get { return (bool)base["property"]; }
        set { base["property"] = value; }
    }

    // The additional property needs to be added to the properties of the standard endpoint element
    protected override ConfigurationPropertyCollection Properties
    {
        get
        {
            ConfigurationPropertyCollection properties = base.Properties;
            properties.Add(new ConfigurationProperty("property", typeof(bool), false, ConfigurationPropertyOptions.None));
            return properties;
        }
    }

    // Return the type of this standard endpoint
    protected override Type EndpointType
    {
        get { return typeof(CustomEndpoint); }
    }

    // Create the custom service endpoint
    protected override ServiceEndpoint CreateServiceEndpoint(ContractDescription contract)
    {
        return new CustomEndpoint();
    }

    // Read the value given to the property in config and save it
    protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
    {
        CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
        customEndpoint.Property = this.Property;
    }

    // Read the value given to the property in config and save it
    protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ChannelEndpointElement channelEndpointElement)
    {
        CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
        customEndpoint.Property = this.Property;
    }

    // No validation in this sample
    protected override void OnInitializeAndValidate(ServiceEndpointElement serviceEndpointElement)
    {
    }

    // No validation in this sample
    protected override void OnInitializeAndValidate(ChannelEndpointElement channelEndpointElement)
    {
    }
}

Het StandardEndpointCollectionElement<TStandardEndpoint,TEndpointConfiguration> biedt het back-uptype voor de verzameling die wordt weergegeven onder de <standardEndpoints> sectie in de configuratie voor het standaardeindpunt. In het volgende voorbeeld ziet u hoe u deze klasse implementeert.

public class CustomEndpointCollectionElement : StandardEndpointCollectionElement<CustomEndpoint, CustomEndpointElement>
{
    // ...
}

In het volgende voorbeeld ziet u hoe u een standaardeindpunt registreert in de sectie Extensies.

<extensions>
      <standardEndpointExtensions>
        <add
          name="customStandardEndpoint"
          type="CustomEndpointCollectionElement, Example.dll,
                Version=1.0.0.0, Culture=neutral, PublicKeyToken=ffffffffffffffff"/>
      </standardEndpointExtensions>
</extensions>

Een standaardeindpunt configureren

Standaardeindpunten kunnen worden toegevoegd in code of in configuratie. Als u een standaardeindpunt in code wilt toevoegen, instantieert u gewoon het juiste standaardeindpunttype en voegt u dit toe aan de servicehost, zoals wordt weergegeven in het volgende voorbeeld:

serviceHost.AddServiceEndpoint(new CustomEndpoint());

Als u een standaardeindpunt in de configuratie wilt toevoegen, voegt u een <endpoint> element toe aan het <service> element en eventuele benodigde configuratie-instellingen in het <standardEndpoints> element. In het volgende voorbeeld ziet u hoe u een UdpDiscoveryEndpointvan de standaardeindpunten toevoegt die worden geleverd met .NET Framework 4.6.1.

<services>
  <service>
    <endpoint isSystemEndpoint="true" kind="udpDiscoveryEndpoint" />
  </service>
</services>
<standardEndpoints>
  <udpDiscoveryEndpoint>
     <standardEndpoint multicastAddress="soap.udp://239.255.255.250:3702" />
  </udpDiscoveryEndpoint>
</standardEndpoints>

Het type standaardeindpunt wordt opgegeven met behulp van het type kenmerk in het <endpoint> element. Het eindpunt is geconfigureerd binnen het <standardEndpoints> element. In het bovenstaande voorbeeld wordt een UdpDiscoveryEndpoint eindpunt toegevoegd en geconfigureerd. Het <udpDiscoveryEndpoint> element bevat een <standardEndpoint> element waarmee de MulticastAddress eigenschap van de UdpDiscoveryEndpoint.

Standaardeindpunten die zijn geleverd met .NET Framework

De volgende tabel bevat de standaardeindpunten die zijn geleverd met .NET Framework 4.6.1.

Mex Endpoint Een standaardeindpunt dat wordt gebruikt voor het beschikbaar maken van servicemetagegevens.

AnnouncementEndpoint Een standaardeindpunt dat wordt gebruikt door services om aankondigingsberichten te verzenden.

DiscoveryEndpoint Een standaardeindpunt dat wordt gebruikt door services om detectieberichten te verzenden.

UdpDiscoveryEndpoint Een standaardeindpunt dat vooraf is geconfigureerd voor detectiebewerkingen via een UDP multicast-binding.

UdpAnnouncementEndpoint Een standaardeindpunt dat wordt gebruikt door services om aankondigingsberichten te verzenden via een UDP-binding.

DynamicEndpoint Een standaardeindpunt dat WS-Discovery gebruikt om het eindpuntadres dynamisch te vinden tijdens runtime.

ServiceMetadataEndpoint Een standaardeindpunt voor het uitwisselen van metagegevens.

WebHttpEndpoint Een standaardeindpunt met een WebHttpBinding binding waarmee automatisch het WebHttpBehavior gedrag wordt toegevoegd

WebScriptEndpoint Een standaardeindpunt met een WebHttpBinding binding waarmee automatisch het WebScriptEnablingBehavior gedrag wordt toegevoegd.

WebServiceEndpoint Een standaardeindpunt met een WebHttpBinding binding.

WorkflowControlEndpoint Een standaardeindpunt waarmee u besturingsbewerkingen voor werkstroomexemplaren kunt aanroepen.

WorkflowHostingEndpoint Een standaardeindpunt dat ondersteuning biedt voor het maken van werkstromen en het hervatten van bladwijzers.