Verwendung von StandardendpunktenUsage of Standard Endpoints

In diesem Beispiel wird veranschaulicht, wie Standardendpunkte in Dienstkonfigurationsdateien verwendet werden.This sample demonstrates how to use standard endpoints in service configuration files. Ein Standardendpunkt ermöglicht es dem Benutzer, einfacher Endpunktdefinitionen anzugeben, indem mit einer einzigen Eigenschaft eine Kombination aus Adresse, Bindung und Vertrag beschrieben und diesen Elementen zusätzliche Eigenschaften zugeordnet werden.A standard endpoint allows the user to simplify endpoint definitions by using a single property to describe an address, binding and contract combination with additional properties associated to it. In diesem Beispiel wird veranschaulicht, wie ein benutzerdefinierter Standardendpunkt definiert und implementiert wird und wie bestimmte Eigenschaften im Endpunkt definiert werden.This sample demonstrates how to define and implement a custom standard endpoint and how to define specific properties in the endpoint.

BeispieldetailsSample Details

Dienstendpunkte können mit der Bereitstellung von drei Parametern angegeben werden: Adresse, Bindung und Vertrag.Service endpoints can be specified by supplying three parameters: address, binding and contract. Andere Parameter, die angegeben werden können, sind etwa Verhaltenskonfiguration, Header, Überwachungs-URI usw.Other parameters that can be supplied include behavior configuration, headers, listen URI, and so on. In einigen Fällen verfügen einige oder alle der Adressen, Bindungen und Verträge über Werte, die nicht veränderlich sind.In some cases, any or all of addresses, bindings and contracts have values that cannot change. Aus diesem Grund können Standardendpunkte verwendet werden.For this reason, it is possible to use standard endpoints. Einige Beispiele für solche Endpunkte enthalten Metadatenaustausch-Endpunkte und Suchendpunkte.Some examples of such endpoints include metadata exchange endpoints and discovery endpoints. Standardendpunkte erhöhen außerdem die Benutzerfreundlichkeit, da sie die Konfiguration von Dienstendpunkten ermöglichen, ohne dass bestimmte Informationen bereitgestellt oder eigene Standardendpunkte erstellt werden müssen, etwa zur Verbesserung der Nutzbarkeit durch die Angabe eines entsprechenden Satzes von Standardwerten, um die Komplexität der Konfigurationsdateien zu reduzieren.Standard endpoints also improve usability by allowing configuration of service endpoints without having to provide information of a fixed nature or to create their own standard endpoints, for example to improve usability by supplying a reasonable set of default values and thus reducing the verbosity of configuration files.

Dieses Beispiel besteht aus zwei Projekten: dem Dienst, der zwei Standardendpunkte definiert, und dem Client, der mit dem Dienst kommuniziert.This sample consists of two projects: the service that defines two standard endpoints and the client that communicates with the service. Die Methode zur Definition der Standardendpunkte für den Dienst in der Konfigurationsdatei wird im folgenden Beispiel erläutert.The way the standard endpoints are defined for the service in the configuration file is show in the following example.

<?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>  

Der erste für den Dienst definierte Endpunkt ist ein customEndpoint, dessen Definition im Abschnitt <standardEndpoints> angezeigt wird. Dabei enthält die property-Eigenschaft den Wert true.The first endpoint defined for the service is of kind customEndpoint, whose definition can be seen in the <standardEndpoints> section, in which the property property is given the value true. Hierbei handelt es sich um einen Endpunkt, der mit einer neuen Eigenschaft angepasst wird.This is the case of an endpoint customized with a new property. Der zweite Endpunkt entspricht einem Metadatenendpunkt, in dem die Werte für die Adresse, die Bindung und den Vertrag fest angegeben sind.The second endpoint corresponds to a metadata endpoint, in which the values for address, binding and contract are fixed.

Für die Definition des Standardendpunkt-Elements muss eine Klasse, die sich von StandardEndpointElement ableitet, erstellt werden.To define the standard endpoint element, a class that derives from StandardEndpointElement must be created. Im Fall dieses Beispiels wurde die CustomEndpointElement-Klasse wie im folgenden Beispiel dargestellt definiert.In the case of this sample, the CustomEndpointElement class has been defined as shown in the following example.

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

Es wird ein CreateServiceEndpoint-Objekt in der CustomEndpoint-Funktion erstellt.In the CreateServiceEndpoint function, a CustomEndpoint object is created. Die entsprechende Definition wird im folgenden Beispiel dargestellt.Its definition is shown in the following example.

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

Für die Kommunikation zwischen Dienst und Client wird im Client ein Dienstverweis zum Dienst erstellt.To perform the communication between service and client, a service reference is created in the client to the service. Wenn das Beispiel erstellt und ausgeführt wurde, wird der Dienst ausgeführt, und der Client kommuniziert damit.When the sample is built and executed, the service executes and the client communicates with it. Beachten Sie, dass der Dienstverweis stets aktualisiert werden muss, wenn es eine Änderung im Dienst gibt.Note that the service reference should be updated every time there is some change in the service.

So verwenden Sie dieses BeispielTo use this sample

  1. Öffnen Sie in Visual Studio 2012Visual Studio 2012 die Datei StandardEndpoints.sln.Using Visual Studio 2012Visual Studio 2012, open the StandardEndpoints.sln file.

  2. Aktivieren Sie mehrere Projekte, um zu starten.Enable multiple projects to start up.

    1. In Projektmappen-Explorermit der rechten Maustaste auf die Projektmappe Standardendpunkte, und wählen Sie dann Eigenschaften.In Solution Explorer, right-click the Standard Endpoints solution and then select Properties.

    2. In allgemeine EigenschaftenOption Startprojekt, und klicken Sie dann auf mehrere Startprojekte.In Common Properties, select Startup Project, and then click Multiple Startup Projects.

    3. Verschieben Sie das Dienstprojekt an den Anfang der Liste mit den Aktion festgelegt starten.Move the Service project to the beginning of the list, with the Action set to Start.

    4. Verschieben Sie die Client-Projekt nach dem Dienstprojekt auch mit der Aktion festgelegt starten.Move the Client project after the Service project, also with the Action set to Start.

      Dadurch wird angegeben, dass das Clientprojekt nach dem Dienstprojekt ausgeführt werden soll.This specifies that the Client project is executed after the Service project.

  3. Drücken Sie F5, um die Projektmappe auszuführen.To run the solution, press F5.

Hinweis

Wenn diese Schritte nicht funktionieren, stellen Sie mithilfe der folgenden Schritte sicher, dass die Umgebung ordnungsgemäß eingerichtet wurde.If these steps do not work, then make sure that your environment has been properly set up, using the following steps.

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.
    1. Führen Sie zum Erstellen der Projektmappe die Anweisungen im Erstellen der Windows Communication Foundation-Beispiele.To build the solution, follow the instructions in Building the Windows Communication Foundation Samples.
    2. Um das Beispiel in einer einzelnen oder Konfigurationen mit mehreren Computern ausführen, befolgen Sie die Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single or multiple computer configurations, follow the instructions in Running the Windows Communication Foundation Samples.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Services\StandardEndpoints

Siehe auchSee Also