Konfigurieren von Bindungen für Windows Communication Foundation-DiensteConfiguring Bindings for Windows Communication Foundation Services

Beim Erstellen einer Anwendung möchten Sie dem Administrator nach Bereitstellung der Anwendung möglicherweise Entscheidungen mitteilen.When creating an application, you often want to defer decisions to the administrator after the deployment of the application. Beispielsweise wissen Sie häufig nicht im Voraus, welche Dienstadresse oder welcher URI (Uniform Resource Identifier) verwendet wird.For example, there is often no way of knowing in advance what a service address, or Uniform Resource Identifier (URI), will be. Anstatt eine Adresse fest zu programmieren, sollte diese Aufgabe einem Administrator nach dem Erstellen eines Diensts übergeben werden.Instead of hard-coding an address, it is preferable to allow an administrator to do so after creating a service. Diese Flexibilität wird durch Konfiguration ermöglicht.This flexibility is accomplished through configuration.

Hinweis

Verwenden der ServiceModel Metadata Utility Tool (Svcutil.exe) mit dem /config Switch Konfigurationsdateien schnell zu erstellen.Use the ServiceModel Metadata Utility Tool (Svcutil.exe) with the /config switch to quickly create configuration files.

HauptabschnitteMajor Sections

Der Windows Communication Foundation (WCF)--Konfigurationsschema schließt die folgenden drei Hauptabschnitte (serviceModel, bindings, und services):The Windows Communication Foundation (WCF) configuration scheme includes the following three major sections (serviceModel, bindings, and services):

<configuration>  
    <system.serviceModel>  
        <bindings>  
        </bindings>  
        <services>  
        </services>  
        <behaviors>  
        </behaviors>  
    </system.serviceModel>  
</configuration>  

ServiceModel-ElementeServiceModel Elements

Der Abschnitt "" durch begrenzt, die die system.ServiceModel Element so konfigurieren Sie einen Diensttyp mit einem oder mehreren Endpunkten sowie Einstellungen für einen Dienst.You can use the section bounded by the system.ServiceModel element to configure a service type with one or more endpoints, as well as settings for a service. Jeder Endpunkt kann dann mit einer Adresse, einem Vertrag und einer Bindung konfiguriert werden.Each endpoint can then be configured with an address, a contract, and a binding. Weitere Informationen über Endpunkte finden Sie unter Endpunkterstellung.For more information about endpoints, see Endpoint Creation Overview. Wenn Sie keine Endpunkte angeben, werden von der Runtime automatisch Standardendpunkte hinzugefügt.If no endpoints are specified, the runtime adds default endpoints. Weitere Informationen zu Standardendpunkten, Bindungen und Verhaltensweisen finden Sie unter vereinfachte Konfiguration und vereinfachte Konfiguration für WCF-Dienste.For more information about default endpoints, bindings, and behaviors, see Simplified Configuration and Simplified Configuration for WCF Services.

Eine Bindung gibt Transporte (HTTP, TCP, Pipes und Message Queuing) sowie Protokolle (Sicherheit, Verlässlichkeit, Transaktionsflüsse) an und besteht aus Bindungselementen, von denen jedes einen Aspekt der Kommunikation eines Endpunkts mit der Welt angibt.A binding specifies transports (HTTP, TCP, pipes, Message Queuing) and protocols (Security, Reliability, Transaction flows) and consists of binding elements, each of which specifies an aspect of how an endpoint communicates with the world.

Z. B. die <BasicHttpBinding > Element gibt an, dass um HTTP als Transport für einen Endpunkt zu nutzen.For example, specifying the <basicHttpBinding> element indicates to use HTTP as the transport for an endpoint. Auf diese Weise wird der Endpunkt zur Laufzeit aktiviert, wenn der Dienst, der diesen Endpunkt verwendet, geöffnet wird.This is used to wire up the endpoint at run time when the service using this endpoint is opened.

Es gibt zwei Arten von Bindungen: vordefinierte und benutzerdefinierte.There are two kinds of bindings: predefined and custom. Vordefinierte Bindungen enthalten nützliche Kombinationen von Elementen, die in allgemeinen Szenarien verwendet werden.Predefined bindings contain useful combinations of elements that are used in common scenarios. Eine Liste der vordefinierten Bindungstypen, die WCF bietet, finden Sie unter sicherheitsbindungsarten Bindungen.For a list of predefined binding types that WCF provides, see System-Provided Bindings. Wenn keine vordefinierte Bindungsauflistung über die korrekte Kombination von Funktionen verfügt, die eine Dienstanwendung benötigt, können Sie benutzerdefinierte Bindungen erstellen, um den Anforderungen der Anwendung zu entsprechen.If no predefined binding collection has the correct combination of features that a service application needs, you can construct custom bindings to meet the application's requirements. Weitere Informationen über benutzerdefinierte Bindungen finden Sie unter <CustomBinding >.For more information about custom bindings, see <customBinding>.

Die folgenden vier Beispielen werden die am häufigsten verwendeten Bindungskonfigurationen dargestellt für das Einrichten eines WCF-Diensts verwendet.The following four examples illustrate the most common binding configurations used for setting up a WCF service.

Angeben eines Endpunkts, um einen Bindungstyp zu verwendenSpecifying an Endpoint to Use a Binding Type

Das erste Beispiel zeigt, wie ein Endpunkt angegeben wird, der mit einer Adresse, einem Vertrag oder einer Bindung konfiguriert wurde.The first example illustrates how to specify an endpoint configured with an address, a contract, and a binding.

<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">  
  <!—- This section is optional with the default configuration introduced  
       in .NET Framework 4. -->  
  <endpoint   
      address="/HelloWorld2/"  
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
      binding="basicHttpBinding" />
</service>  

In diesem Beispiel gibt das name-Attribut an, für welchen Diensttyp die Konfiguration verwendet wird.In this example, the name attribute indicates which service type the configuration is for. Wenn Sie in Ihrem Code einen Dienst mit dem HelloWorld-Vertrag erstellen, wird er mit allen in der Beispielkonfiguration definierten Endpunkten initialisiert.When you create a service in your code with the HelloWorld contract, it is initialized with all of the endpoints defined in the example configuration. Wenn die Assembly nur einen Dienstvertrag implementiert die name -Attribut ausgelassen werden, da der Dienst den einzigen verfügbaren Typ verwendet.If the assembly implements only one service contract, the name attribute can be omitted because the service uses the only available type. Das Attribut nimmt eine Zeichenfolge, die im Format Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null vorliegen mussThe attribute takes a string, which must be in the format Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

Das address-Attribut gibt den URI an, den andere Endpunkte für die Kommunikation mit dem Dienst verwenden.The address attribute specifies the URI that other endpoints use to communicate to the service. Der URI kann entweder ein absoluter oder relativer Pfad sein.The URI can be either an absolute or relative path. Bei Bereitstellung einer relativen Adresse wird vom Host erwartet, dass er eine Basisadresse bereitstellt, die für das in der Bindung verwendete Transportschema geeignet ist.If a relative address is provided, the host is expected to provide a base address that is appropriate for the transport scheme used in the binding. Wenn keine Adresse konfiguriert wird, wird angenommen, dass die Basisadresse der Adresse für diesen Endpunkt entspricht.If an address is not configured, the base address is assumed to be the address for that endpoint.

Das contract-Attribut gibt den Vertrag an, den dieser Endpunkt verfügbar macht.The contract attribute specifies the contract this endpoint is exposing. Der Dienstimplementierungstyp muss den Vertragstyp implementieren.The service implementation type must implement the contract type. Wenn eine Dienstimplementierung einen einzelnen Vertragstyp implementiert, kann diese Eigenschaft ausgelassen werden.If a service implementation implements a single contract type, then this property can be omitted.

Das binding-Attribut wählt eine vordefinierte oder benutzerdefinierte Bindung aus, die für diesen speziellen Endpunkt verwendet werden soll.The binding attribute selects a predefined or custom binding to use for this specific endpoint. Ein Endpunkt, der eine Bindung nicht explizit auswählt, verwendet die standardmäßige Bindungsauswahl BasicHttpBinding.An endpoint that does not explicitly select a binding uses the default binding selection, which is BasicHttpBinding.

Ändern einer vordefinierten BindungModifying a Predefined Binding

Im folgenden Beispiel wird eine vordefinierte Bindung geändert.In the following example, a predefined binding is modified. Sie kann anschließend verwendet werden, um einen beliebigen Endpunkt im Dienst zu konfigurieren.It can then be used to configure any endpoint in the service. Die Bindung wird geändert, indem der ReceiveTimeout-Wert auf 1 Sekunde festgelegt wird.The binding is modified by setting the ReceiveTimeout value to 1 second. Beachten Sie, dass die Eigenschaft ein TimeSpan-Objekt zurückgibt.Note that the property returns a TimeSpan object.

Diese geänderte Bindung finden Sie im Bindungsabschnitt.That altered binding is found in the bindings section. Sie kann jetzt beim Erstellen von Endpunkten durch Festlegen des binding-Attributs im endpoint-Element verwendet werden.This altered binding can now be used when creating any endpoint by setting the binding attribute in the endpoint element.

Hinweis

Wenn Sie der Bindung einen besonderen Namen geben, muss die im Dienstendpunkt angegebene bindingConfiguration diesem Namen entsprechen.If you give a particular name to the binding, the bindingConfiguration specified in the service endpoint must match with it.

<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">  
  <endpoint   
      address="/HelloWorld2/"  
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
      binding="basicHttpBinding" />
</service>  
<bindings>  
    <basicHttpBinding   
        receiveTimeout="00:00:01"  
    />  
</bindings>  

Konfigurieren eines Verhaltens für einen DienstConfiguring a Behavior to Apply to a Service

Im folgenden Beispiel wird ein bestimmtes Verhalten für den Diensttyp konfiguriert.In the following example, a specific behavior is configured for the service type. Die ServiceMetadataBehavior Element wird zum Aktivieren der ServiceModel Metadata Utility Tool (Svcutil.exe) zum Abfragen des Diensts und Web Services Description Language (WSDL)-Dokumente aus den Metadaten zu generieren.The ServiceMetadataBehavior element is used to enable the ServiceModel Metadata Utility Tool (Svcutil.exe) to query the service and generate Web Services Description Language (WSDL) documents from the metadata.

Hinweis

Wenn Sie dem Verhalten einen besonderen Namen geben, muss die im Dienst- oder Endpunktabschnitt angegebene behaviorConfiguration diesem Namen entsprechen.If you give a particular name to the behavior, the behaviorConfiguration specified in the service or endpoint section must match it.

<behaviors>  
    <behavior>  
        <ServiceMetadata httpGetEnabled="true" />   
    </behavior>  
</behaviors>  
<services>  
    <service   
       name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
       <endpoint   
          address="http://computer:8080/Hello"  
          contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
          binding="basicHttpBinding" />
    </service>  
</services>  

Die vorangehende Konfiguration ermöglicht einem Client, den "HelloWorld"-Dienst aufzurufen und die Metadaten des Diensts abzurufen.The preceding configuration enables a client to call and get the metadata of the "HelloWorld" typed service.

svcutil /config:Client.exe.config http://computer:8080/Hello?wsdl

Angeben eines Diensts mit zwei Endpunkten mithilfe unterschiedlicher BindungswerteSpecifying a Service with Two Endpoints Using Different Binding Values

In diesem letzten Beispiel werden zwei Endpunkte für den HelloWorld-Diensttyp konfiguriert.In this last example, two endpoints are configured for the HelloWorld service type. Jeder Endpunkt verwendet ein anderes benutzerdefiniertes bindingConfiguration Attribut des desselben Bindungstyps (jedes ändert die basicHttpBinding).Each endpoint uses a different customized bindingConfiguration attribute of the same binding type (each modifies the basicHttpBinding).

<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">  
    <endpoint  
        address="http://computer:8080/Hello1"  
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
        binding="basicHttpBinding"  
        bindingConfiguration="shortTimeout" />
    <endpoint  
        address="http://computer:8080/Hello2"  
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
        binding="basicHttpBinding"  
        bindingConfiguration="Secure" />
</service>  
<bindings>  
    <basicHttpBinding   
        name="shortTimeout"  
        timeout="00:00:00:01"   
     />  
     <basicHttpBinding   
        name="Secure">  
        <Security mode="Transport" />  
     </basicHttpBinding>
</bindings>  

Sie können dasselbe Verhalten mit der Konfiguration erzielen, indem Sie einen protocolMapping-Abschnitt hinzufügen und die Bindungen konfigurieren, wie im folgenden Beispiel gezeigt.You can get the same behavior using the default configuration by adding a protocolMapping section and configuring the bindings as demonstrated in the following example.

<protocolMapping>  
    <add scheme="http" binding="basicHttpBinding" bindingConfiguration="shortTimeout" />  
    <add scheme="https" binding="basicHttpBinding" bindingConfiguration="Secure" />  
</protocolMapping>  
<bindings>  
    <basicHttpBinding   
        name="shortTimeout"  
        timeout="00:00:00:01"   
     />  
     <basicHttpBinding   
        name="Secure" />  
        <Security mode="Transport" />  
</bindings>  

Siehe auchSee Also

Vereinfachte KonfigurationSimplified Configuration
Vom System bereitgestellte BindungenSystem-Provided Bindings
Übersicht über die EndpunkterstellungEndpoint Creation Overview
Verwenden von Bindungen, um Dienste und Clients zu konfigurierenUsing Bindings to Configure Services and Clients