Dela via


Standardslutpunkter

Slutpunkter definieras genom att ange en adress, en bindning och ett kontrakt. Andra parametrar som kan anges på en slutpunkt är beteendekonfiguration, rubriker och lyssnings-URI:er. För vissa typer av slutpunkter ändras inte dessa värden. Till exempel använder IMetadataExchange metadatautbytesslutpunkter alltid kontraktet. Andra slutpunkter, till exempel WebHttpEndpoint alltid kräver ett angivet slutpunktsbeteende. Användbarheten för en slutpunkt kan förbättras genom att ha slutpunkter med standardvärden för vanliga slutpunktsegenskaper. Med standardslutpunkter kan en utvecklare definiera en slutpunkt som har standardvärden eller där en eller flera slutpunkters egenskaper inte ändras. Med de här slutpunkterna kan du använda en sådan slutpunkt utan att behöva ange information av statisk karaktär. Standardslutpunkter kan användas för infrastruktur- och programslutpunkter.

Infrastrukturslutpunkter

En tjänst kan exponera slutpunkter med vissa av de egenskaper som inte uttryckligen implementerats av tjänstförfattaren. Till exempel exponerar exchange-slutpunkten för metadata kontraktet, men som tjänstförfattare implementerar IMetadataExchange du inte gränssnittet, det implementeras av WCF. Sådana infrastrukturslutpunkter har standardvärden för en eller flera slutpunktsegenskaper, varav vissa kan vara oföränderliga. Egenskapen Contract för metadatautbytesslutpunkten måste vara IMetadataExchange, medan andra egenskaper som bindning kan anges av utvecklaren. Infrastrukturslutpunkter identifieras genom att egenskapen anges IsSystemEndpoint till true.

Programslutpunkter

Programutvecklare kan definiera sina egna standardslutpunkter som anger standardvärden för adressen, bindningen eller kontraktet. Du definierar en standardslutpunkt genom att härleda en klass från ServiceEndpoint och ange lämpliga slutpunktsegenskaper. Du kan ange standardvärden för egenskaper som kan ändras. Vissa andra egenskaper har statiska värden som inte kan ändras. I följande exempel visas hur du implementerar en standardslutpunkt.

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; }
}

Om du vill använda en användardefinierad anpassad slutpunkt i en konfigurationsfil måste du härleda en klass från StandardEndpointElement, härleda en klass från StandardEndpointCollectionElement<TStandardEndpoint,TEndpointConfiguration>och registrera den nya standardslutpunkten i avsnittet tillägg i app.config eller machine.config. Tillhandahåller konfigurationsstöd StandardEndpointElement för standardslutpunkten, som du ser i följande exempel.

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)
    {
    }
}

StandardEndpointCollectionElement<TStandardEndpoint,TEndpointConfiguration> Tillhandahåller bakgrundstypen för samlingen som visas under <standardEndpoints> avsnittet i konfigurationen för standardslutpunkten. I följande exempel visas hur du implementerar den här klassen.

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

I följande exempel visas hur du registrerar en standardslutpunkt i avsnittet tillägg.

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

Konfigurera en standardslutpunkt

Standardslutpunkter kan läggas till i kod eller i konfigurationen. Om du vill lägga till en standardslutpunkt i kod instansierar du helt enkelt lämplig standardslutpunktstyp och lägger till den i tjänstvärden enligt följande exempel:

serviceHost.AddServiceEndpoint(new CustomEndpoint());

Om du vill lägga till en standardslutpunkt i konfigurationen lägger du till ett <endpoint> element i elementet <service> och eventuella konfigurationsinställningar som behövs i elementet <standardEndpoints> . I följande exempel visas hur du lägger till en UdpDiscoveryEndpoint, en av standardslutpunkterna som levereras med .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>

Typen av standardslutpunkt anges med hjälp av typattributet i elementet <endpoint> . Slutpunkten konfigureras i -elementet <standardEndpoints> . I exemplet ovan läggs en UdpDiscoveryEndpoint slutpunkt till och konfigureras. Elementet <udpDiscoveryEndpoint> innehåller en <standardEndpoint> som anger MulticastAddress egenskapen för UdpDiscoveryEndpoint.

Standardslutpunkter som levereras med .NET Framework

I följande tabell visas standardslutpunkterna som levereras med .NET Framework 4.6.1.

Mex Endpoint En standardslutpunkt som används för att exponera tjänstmetadata.

AnnouncementEndpoint En standardslutpunkt som används av tjänster för att skicka meddelanden.

DiscoveryEndpoint En standardslutpunkt som används av tjänster för att skicka identifieringsmeddelanden.

UdpDiscoveryEndpoint En standardslutpunkt som är förkonfigurerad för identifieringsåtgärder över en UDP multicast-bindning.

UdpAnnouncementEndpoint En standardslutpunkt som används av tjänster för att skicka meddelanden via en UDP-bindning.

DynamicEndpoint En standardslutpunkt som använder WS-Discovery för att hitta slutpunktsadressen dynamiskt vid körning.

ServiceMetadataEndpoint En standardslutpunkt för metadatautbyte.

WebHttpEndpointEn standardslutpunkt med en WebHttpBinding bindning som automatiskt lägger till beteendet WebHttpBehavior

WebScriptEndpoint En standardslutpunkt med en WebHttpBinding bindning som automatiskt lägger till beteendet WebScriptEnablingBehavior .

WebServiceEndpoint En standardslutpunkt med en WebHttpBinding bindning.

WorkflowControlEndpoint En standardslutpunkt som gör att du kan anropa kontrollåtgärder på arbetsflödesinstanser.

WorkflowHostingEndpoint En standardslutpunkt som stöder skapande av arbetsflöden och återupptagande av bokmärken.