Teilen über


Die Konfiguration von Bindungen für die Windows Communication Foundation-Dienste.

Beim Erstellen einer Anwendung möchten Sie häufig Entscheidungen an den Administrator nach der Bereitstellung der Anwendung zurückstellen. Beispielsweise gibt es häufig keine Möglichkeit, im Voraus zu wissen, was eine Dienstadresse oder ein Uniform Resource Identifier (URI) sein wird. Anstatt eine Adresse hartcodieren zu müssen, empfiehlt es sich, einem Administrator dies nach dem Erstellen eines Diensts zu ermöglichen. Diese Flexibilität wird durch Konfiguration erreicht.

Hinweis

Verwenden Sie das ServiceModel Metadata Utility Tool (Svcutil.exe) mit dem /config Switch, um schnell Konfigurationsdateien zu erstellen.

Hauptabschnitte

Das Windows Communication Foundation (WCF)-Konfigurationsschema enthält die folgenden drei Hauptabschnitte (serviceModel, bindingsund services):

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

ServiceModel-Elemente

Sie können den vom Element gebundenen system.ServiceModel Abschnitt verwenden, um einen Diensttyp mit einem oder mehreren Endpunkten sowie Einstellungen für einen Dienst zu konfigurieren. Jeder Endpunkt kann dann mit einer Adresse, einem Vertrag und einer Bindung konfiguriert werden. Weitere Informationen zu Endpunkten finden Sie unter Endpoint Creation Overview. Wenn keine Endpunkte angegeben werden, fügt die Laufzeit Standardendpunkte hinzu. Weitere Informationen zu Standardendpunkten, Bindungen und Verhalten finden Sie unter Vereinfachte Konfiguration und vereinfachte Konfiguration für WCF-Dienste.

Eine Bindung gibt Transporte (HTTP, TCP, Pipes, Message Queuing) und Protokolle (Sicherheit, Zuverlässigkeit, Transaktionsflüsse) an und besteht aus Bindungselementen, von denen jeder einen Aspekt der Kommunikation eines Endpunkts mit der Welt angibt.

Wenn Sie z. B. das <basicHttpBinding-Element> angeben, wird angegeben, dass HTTP als Transport für einen Endpunkt verwendet wird. Dies wird zur Laufzeit verwendet, um den Endpunkt anzuschließen, wenn der Dienst, der diesen Endpunkt verwendet, geöffnet wird.

Es gibt zwei Arten von Bindungen: vordefinierte und benutzerdefinierte. Vordefinierte Bindungen enthalten nützliche Kombinationen von Elementen, die in gängigen Szenarien verwendet werden. Eine Liste der vordefinierten Bindungstypen, die WCF bereitstellt, finden Sie unterSystem-Provided Bindungen. Wenn keine vordefinierte Bindungssammlung über die richtige Kombination von Features verfügt, die eine Dienstanwendung benötigt, können Sie benutzerdefinierte Bindungen erstellen, um die Anforderungen der Anwendung zu erfüllen. Weitere Informationen zu benutzerdefinierten Bindungen finden Sie unter <customBinding>.

Die folgenden vier Beispiele veranschaulichen die am häufigsten verwendeten Bindungskonfigurationen zum Einrichten eines WCF-Diensts.

Angeben eines Endpunkts zur Verwendung eines Bindungstyps

Im ersten Beispiel wird veranschaulicht, wie sie einen Endpunkt angeben, der mit einer Adresse, einem Vertrag und einer Bindung konfiguriert ist.

<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 bestimmt ist. Wenn Sie einen Dienst in Ihrem Code mit dem HelloWorld Vertrag erstellen, wird er mit allen in der Beispielkonfiguration definierten Endpunkten initialisiert. Wenn die Assembly nur einen Dienstvertrag implementiert, kann das name Attribut weggelassen werden, da der Dienst den einzigen verfügbaren Typ verwendet. Das Attribut akzeptiert eine Zeichenfolge, die im Format enthalten sein muss. 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. Der URI kann entweder ein absoluter oder relativer Pfad sein. Wenn eine relative Adresse angegeben wird, wird erwartet, dass der Host eine Basisadresse bereitstellt, die für das in der Bindung verwendete Transportschema geeignet ist. Wenn keine Adresse konfiguriert ist, wird die Basisadresse als Adresse für diesen Endpunkt angenommen.

Das contract Attribut gibt den Vertrag an, den dieser Endpunkt verfügbar macht. Der Dienstimplementierungstyp muss den Vertragstyp implementieren. Wenn eine Dienstimplementierung einen einzelnen Vertragstyp implementiert, kann diese Eigenschaft weggelassen werden.

Das binding Attribut wählt eine vordefinierte oder benutzerdefinierte Bindung aus, die für diesen bestimmten Endpunkt verwendet werden soll. Ein Endpunkt, der keine Bindung explizit auswählt, verwendet die Standardbindungsauswahl, d. h BasicHttpBinding.

Ändern einer vordefinierten Bindung

Im folgenden Beispiel wird eine vordefinierte Bindung geändert. Sie kann dann zum Konfigurieren eines beliebigen Endpunkts im Dienst verwendet werden. Die Bindung wird geändert, indem der ReceiveTimeout Wert auf 1 Sekunde festgelegt wird. Beachten Sie, dass die Eigenschaft ein TimeSpan Objekt zurückgibt.

Diese geänderte Bindung befindet sich im Abschnitt "Bindungen". Diese geänderte Bindung kann jetzt beim Erstellen eines Endpunkts verwendet werden, indem das binding Attribut im endpoint Element festgelegt wird.

Hinweis

Wenn Sie der Bindung einen bestimmten Namen geben, muss der bindingConfiguration im Dienstendpunkt angegebene Wert mit ihm übereinstimmen.

<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, das auf einen Dienst angewendet werden soll

Im folgenden Beispiel wird ein bestimmtes Verhalten für den Diensttyp konfiguriert. Das ServiceMetadataBehavior-Element wird verwendet, um mit dem ServiceModel Metadata Utility Tool (Svcutil.exe) den Dienst abzufragen und Web Services Description Language (WSDL)-Dokumente aus den Metadaten zu generieren.

Hinweis

Wenn Sie einem Verhalten einer Komponente einen bestimmten Namen geben, muss der behaviorConfiguration im Dienst- oder Endpunktabschnitt angegebene Wert dem entsprechen.

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

Mit der vorherigen Konfiguration kann ein Client die Metadaten des typierten Diensts "HelloWorld" aufrufen und abrufen.

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

Angeben eines Diensts mit zwei Endpunkten mit unterschiedlichen Bindungswerten

In diesem letzten Beispiel werden zwei Endpunkte für den HelloWorld Diensttyp konfiguriert. Jeder Endpunkt verwendet ein anderes benutzerdefiniertes bindingConfiguration Attribut desselben Bindungstyps (jedes ändert die 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 mithilfe der Standardkonfiguration abrufen, indem Sie einen protocolMapping Abschnitt hinzufügen und die Bindungen konfigurieren, wie im folgenden Beispiel gezeigt.

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