StandardendpunkteStandard Endpoints

Endpunkte werden definiert, indem eine Adresse, eine Bindung und ein Vertrag angegeben wird.Endpoints are defined by specifying an address, a binding, and a contract. Andere Parameter, die für einen Endpunkt festgelegt werden können, sind beispielsweise Verhaltenskonfigurationen, Header und Abhör-URIs.Other parameters that may be set on an endpoint include behavior configuration, headers, and listen URIs. Für bestimmte Typen von Endpunkten ändern sich diese Werte nicht.For certain types of endpoints these values do not change. Beispielsweise verwenden Metadatenaustausch-Endpunkte immer den IMetadataExchange-Vertrag.For example, metadata exchange endpoints always use the IMetadataExchange contract. Andere Endpunkte, z. B. WebHttpEndpoint, erfordern immer ein angegebenes Endpunktverhalten.Other endpoints, such as WebHttpEndpoint always require a specified endpoint behavior. Die Verwendbarkeit eines Endpunkts kann verbessert werden, indem für häufig verwendete Endpunkteigenschaften Endpunkte mit Standardwerten verwendet werden.The usability of an endpoint can be improved by having endpoints with default values for commonly used endpoint properties. Mithilfe von Standardendpunkten können Entwickler einen Endpunkt definieren, der über Standardwerte verfügt oder für den sich eine oder mehrere Endpunkteigenschaften nicht ändern.Standard endpoints enable a developer to define an endpoint that has default values or where one or more endpoint’s properties does not change. Mit diesen Endpunkten können Sie einen solchen Endpunkt verwenden, ohne Informationen statischer Natur angeben zu müssen.These endpoints allow you to use such an endpoint without having to specify information of a static nature. Standardendpunkte können für Infrastruktur- und Anwendungsendpunkte verwendet werden.Standard endpoints can be used for infrastructure and application endpoints.

InfrastrukturendpunkteInfrastructure Endpoints

Es kann sein, dass ein Dienst Endpunkte verfügbar macht, für die einige Eigenschaften vom Dienstautor nicht explizit implementiert wurden.A service may expose endpoints with some of the properties not explicitly implemented by the service author. Der Metadatenaustausch-Endpunkt macht z. B. den IMetadataExchange-Vertrag verfügbar. Als Dienstautor implementieren Sie diese Schnittstelle jedoch nicht, sondern sie wird von der WCF implementiert.For example, the metadata exchange endpoint exposes the IMetadataExchange contract but as a service author you do not implement that interface, it is implemented by WCF. Solche Infrastrukturendpunkte haben Standardwerte für eine oder mehrere Endpunkteigenschaften, von denen einige ggf. unveränderbar sind.Such infrastructure endpoints have default values for one or more endpoint properties, some of which may be unalterable. Die Contract-Eigenschaft des Metadatenaustausch-Endpunkts muss IMetadataExchange sein, während andere Eigenschaften wie die Bindung vom Entwickler angegeben werden können.The Contract property of the metadata exchange endpoint must be IMetadataExchange, while other properties like binding can be supplied by the developer. Infrastrukturendpunkte werden identifiziert, indem die IsSystemEndpoint-Eigenschaft auf true festgelegt wird.Infrastructure endpoints are identified by setting the IsSystemEndpoint property to true.

AnwendungsendpunkteApplication Endpoints

Anwendungsentwickler können eigene Standardendpunkte definieren, die Standardwerte für die Adresse, die Bindung oder den Vertrag angeben.Application developers can define their own standard endpoints which specify default values for the address, binding, or contract. Sie definieren einen Standardendpunkt, indem Sie eine Klasse von ServiceEndpoint ableiten und die entsprechenden Endpunkteigenschaften festlegen.You define a standard endpoint by deriving a class from ServiceEndpoint and setting the appropriate endpoint properties. Sie können Standardwerte für Eigenschaften bereitstellen, die geändert werden können.You can provide default values for properties that can be changed. Einige andere Eigenschaften verfügen über statische Werte, die sich nicht ändern können.Some other properties will have static values that cannot change. Das folgende Beispiel zeigt, wie Sie einen Standardendpunkt implementieren.The following example shows how to implement a standard endpoint.

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

Um einen benutzerdefinierten Endpunkt in einer Konfigurationsdatei zu verwenden, müssen Sie eine Klasse von StandardEndpointElement ableiten, eine Klasse von StandardEndpointCollectionElement<TStandardEndpoint,TEndpointConfiguration> ableiten und den neuen Standardendpunkt in der Datei "app.config" oder "machine.config" im Abschnitt mit den Erweiterungen registrieren. Das StandardEndpointElement-Objekt bietet Konfigurationsunterstützung für den Standardendpunkt. Dies wird im folgenden Beispiel veranschaulicht.To use a user-defined custom endpoint in a configuration file you must derive a class from StandardEndpointElement, derive a class from StandardEndpointCollectionElement<TStandardEndpoint,TEndpointConfiguration>, and register the new standard endpoint in the extensions section in app.config or machine.config. The StandardEndpointElement provides configuration support for the standard endpoint, as shown in the following example.

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

Die StandardEndpointCollectionElement<TStandardEndpoint,TEndpointConfiguration> bietet der Unterstützungstyp für die Sammlung, die unter der <standardEndpoints> Abschnitt in der Konfiguration für den Standardendpunkt.The StandardEndpointCollectionElement<TStandardEndpoint,TEndpointConfiguration> provides the backing type for the collection that appears under the <standardEndpoints> section in the configuration for the standard endpoint. Im folgenden Beispiel wird die Implementierung dieser Klasse veranschaulicht.The following example shows how to implement this class.

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

Im folgenden Beispiel wird gezeigt, wie Sie einen Standardendpunkt im Abschnitt für die Erweiterungen registrieren.The following example shows how to register a standard endpoint in the extensions section.

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

Konfigurieren eines StandardendpunktsConfiguring a Standard Endpoint

Standardendpunkte können im Code oder in der Konfiguration hinzugefügt werden.Standard endpoints can be added in code or in configuration. Um einen Standardendpunkt im Code hinzuzufügen, instanziieren Sie einfach den entsprechenden Standardendpunkttyp und fügen diesen dem Diensthost wie im folgenden Beispiel dargestellt hinzu:To add a standard endpoint in code simply instantiate the appropriate standard endpoint type and add it to the service host as shown in the following example:

serviceHost.AddServiceEndpoint(new CustomEndpoint());  

Um einen Standardendpunkt in der Konfiguration hinzuzufügen, fügen Sie ein <endpoint>-Elements auf der <service> Element und alle erforderlichen Konfigurationseinstellungen in der <standardEndpoints> Element.To add a standard endpoint in configuration, add an <endpoint> element to the <service> element and any needed configuration settings in the <standardEndpoints> element. Im folgenden Beispiel wird gezeigt, wie Sie ein UdpDiscoveryEndpoint-Objekt hinzufügen. Dabei handelt es sich um einen der Standardendpunkte, die im Lieferumfang von .NET Framework 4.6.1.NET Framework 4.6.1 enthalten sind.The following example shows how to add a UdpDiscoveryEndpoint, one of the standard endpoints that ships with .NET Framework 4.6.1.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>

Der Typ des Standardendpunkts wird angegeben, mit dem Kind-Attribut in der <endpoint> Element.The type of standard endpoint is specified using the kind attribute in the <endpoint> element. Der Endpunkt ist konfiguriert, in der <standardEndpoints> Element.The endpoint is configured within the <standardEndpoints> element. Im obigen Beispiel wird ein UdpDiscoveryEndpoint-Endpunkt hinzugefügt und konfiguriert.In the example above, a UdpDiscoveryEndpoint endpoint is added and configured. Der <udpDiscoveryEndpoint> Element enthält ein <standardEndpoint> festlegt, die die MulticastAddress Eigenschaft von der UdpDiscoveryEndpoint.The <udpDiscoveryEndpoint> element contains a <standardEndpoint> that sets the MulticastAddress property of the UdpDiscoveryEndpoint.

Im Lieferumfang von .NET Framework enthaltene StandardendpunkteStandard Endpoints Shipped with the .NET Framework

In der folgenden Tabelle sind die im Lieferumfang von .NET Framework 4.6.1.NET Framework 4.6.1 enthaltenen Standardendpunkte aufgeführt.The following table lists the standard endpoints shipped with .NET Framework 4.6.1.NET Framework 4.6.1.

Mex Endpoint
Ein Standardendpunkt, der verwendet wird, um Dienstmetadaten verfügbar zu machen.A standard endpoint that is used to expose service metadata.

AnnouncementEndpoint
Ein Standardendpunkt, der von Diensten verwendet wird, um Ankündigungsmeldungen zu senden.A standard endpoint that is used by services to send announcement messages.

DiscoveryEndpoint
Ein Standardendpunkt, der von Diensten verwendet wird, um Suchmeldungen zu senden.A standard endpoint that is used by services to send discovery messages.

UdpDiscoveryEndpoint
Ein Standardendpunkt, der für Suchvorgänge über eine UDP-Multicastbindung vorkonfiguriert ist.A standard endpoint that is pre-configured for discovery operations over a UDP multicast binding.

UdpAnnouncementEndpoint
Ein Standardendpunkt, der von Diensten verwendet wird, um Ankündigungsmeldungen über eine UDP-Bindung zu senden.A standard endpoint that is used by services to send announcement messages over a UDP binding.

DynamicEndpoint
Ein Standardendpunkt, der die WS-Suche verwendet, um zur Laufzeit dynamisch nach der Endpunktadresse zu suchen.A standard endpoint that uses WS-Discovery to find the endpoint address dynamically at runtime.

ServiceMetadataEndpoint
Ein Standardendpunkt für den Metadatenaustausch.A standard endpoint for metadata exchange.

WebHttpEndpoint
Ein Standardendpunkt mit einer WebHttpBinding-Bindung, die das WebHttpBehavior-Verhalten automatisch hinzufügt.A standard endpoint with a WebHttpBinding binding that automatically adds the WebHttpBehavior behavior

WebScriptEndpoint
Ein Standardendpunkt mit einer WebHttpBinding-Bindung, die das WebScriptEnablingBehavior-Verhalten automatisch hinzufügt.A standard endpoint with a WebHttpBinding binding that automatically adds the WebScriptEnablingBehavior behavior.

WebServiceEndpoint
Ein Standardendpunkt mit einer WebHttpBinding-Bindung.A standard endpoint with a WebHttpBinding binding.

WorkflowControlEndpoint
Ein Standardendpunkt, der es Ihnen ermöglicht, Steuerungsvorgänge für Workflowinstanzen aufzurufen.A standard endpoint that enables you to call control operations on workflow instances.

WorkflowHostingEndpoint
Ein Standardendpunkt, der die Workflowerstellung und die Wiederaufnahme von Lesezeichen unterstützt.A standard endpoint that supports workflow creation and bookmark resumption.