Clientkonfiguration

Mit der Clientkonfiguration von Windows Communication Foundation (WCF) können Sie die Adressen, Bindungen, Verhaltensweisen sowie Verträge angeben, die von Clients zum Herstellen einer Verbindung mit Dienstendpunkten verwendet werden. Das <client>-Element verfügt über ein <endpoint>-Element, dessen Attribute zum Konfigurieren der Adressen, Bindungen, Verhaltensweisen und Verträge für den Endpunkt verwendet werden. Diese Attribute werden im Abschnitt "Konfigurieren von Endpunkten" dieses Themas erläutert.

Das <endpoint>-Element enthält außerdem ein <metadata>-Element, mit dem Einstellungen für das Importieren und Exportieren von Metadaten angegeben werden, ein <headers>-Element mit einer Auflistung von benutzerdefinierten Adressheadern sowie ein <identity>-Element, das die Authentifizierung eines Endpunkts durch andere Endpunkte ermöglicht, die Nachrichten mit diesem austauschen. Das <headers>-Element und das <identity>-Element sind Teil der EndpointAddress und werden im Thema Endpunktadressen näher erläutert. Der Unterabschnitt "Konfigurieren von Metadaten" in diesem Thema enthält auch Hyperlinks zu Themen, in denen die Verwendung von Metadatenerweiterungen erläutert wird.

Konfigurieren von Endpunkten

Die Clientkonfiguration soll dem Client das Angeben mindestens eines Endpunkts ermöglichen, der jeweils über einen eigenen Namen, eine eigene Adresse und einen eigenen Vertrag verfügt. Dabei soll der Endpunkt mit jedem Namen, jeder Adresse und jedem Vertrag in der Clientkonfiguration konfiguriert werden können, der bzw. die auf das <bindings>-Element und das <behaviors>-Element verweist. Die Clientkonfigurationsdatei sollte "App.config" benannt werden, da dieser Name von der Laufzeit von WCF erwartet wird. Das folgende Beispiel zeigt eine Clientkonfigurationsdatei.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
        <client>
          <endpoint
            name="endpoint1"
            address="https://localhost/ServiceModelSamples/service.svc"
            binding="wsHttpBinding"
            bindingConfiguration="WSHttpBinding_IHello"
            behaviorConfiguration="IHello_Behavior"
            contract="IHello" >

            <metadata>
              <wsdlImporters>
                <extension
                  type="Microsoft.ServiceModel.Samples.WsdlDocumentationImporter, WsdlDocumentation"/>
              </wsdlImporters>
            </metadata>

            <identity>
              <servicePrincipalName value="host/localhost" />
            </identity>
          </endpoint>
// Add another endpoint by adding another <endpoint> element.
          <endpoint
            name="endpoint2">
           //Configure another endpoint here.
          </endpoint>
        </client>

//The bindings section references by the bindingConfiguration endpoint attribute.
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IHello" 
                 bypassProxyOnLocal="false" 
                 hostNameComparisonMode="StrongWildcard">
          <readerQuotas maxDepth="32"/>
          <reliableSession ordered="true" 
                           enabled="false" />
          <security mode="Message">
           //Security settings go here.
          </security>
        </binding>
        <binding name="Another Binding"
        //Configure this binding here.
        </binding>
          </wsHttpBinding>
        </bindings>

//The behavior section references by the behaviorConfiguration endpoint attribute.
        <behaviors>
            <endpointBehaviors>
                <behavior name=" IHello_Behavior ">
                    <clientVia />
                </behavior>
            </endpointBehaviors>
        </behaviors>

    </system.serviceModel>
</configuration>

Das optionale name-Attribut identifiziert eindeutig einen Endpunkt für einen angegebenen Vertrag. Es wird von ChannelFactory oder ClientBase verwendet, um anzugeben, welcher Endpunkt in der Clientkonfiguration das Ziel ist, und muss beim Erstellen eines Kanals zur Verarbeitung geladen werden. Als Name für die Endpunktkonfiguration kann auch ein Platzhalterzeichen ("*") verwendet werden. Dadurch wird die ApplyConfiguration-Methode angewiesen, ggf. genau eine Endpunktkonfiguration in der Datei zu laden. Andernfalls wird eine Ausnahme ausgelöst. Wenn dieses Attribut nicht angegeben wird, wird der entsprechende Endpunkt als Standardendpunkt verwendet, der mit dem angegebenen Vertragstyp verknüpft ist. Der Standardwert für das name-Attribut ist eine leere Zeichenfolge, die wie jeder andere Name abgeglichen wird.

Jedem Endpunkt muss eine Adresse zugeordnet sein, um diesen suchen und identifizieren zu können. Das address-Attribut kann verwendet werden, um die URL anzugeben, die den Speicherort des Endpunkts bereitstellt. Die Adresse für einen Dienstendpunkt kann jedoch auch im Code angegeben werden, indem ein Uniform Resource Identifier (URI) erstellt und dem ServiceHost mit einer der AddServiceEndpoint-Methoden hinzugefügt wird. Weitere Informationen finden Sie unter Endpunktadressen. Wie bereits erwähnt, sind das <headers>-Element und das <identity>-Element Teil der EndpointAddress und werden ebenfalls im Thema Endpunktadressen näher besprochen.

Das binding-Attribut gibt den Typ der Bindung an, der vom Endpunkt beim Herstellen einer Verbindung zu einem Dienst erwartet wird. Dieser muss einen registrierten Konfigurationsabschnitt aufweisen, um darauf verweisen zu können. Im vorherigen Beispiel ist dies der <wsHttpBinding>-Abschnitt, der angibt, dass der Endpunkt eine WSHttpBinding verwendet. Möglicherweise sind jedoch mehrere Bindungen eines angegebenen Typs vorhanden, die vom Endpunkt verwendet werden können. Diese verfügen jeweils über ein eigenes <binding>-Element im Typelement (der Bindung). Das bindingconfiguration-Attribut wird verwendet, um zwischen Bindungen des gleichen Typs zu unterscheiden. Sein Wert wird mit dem name-Attribut des <binding>-Elements abgestimmt. Weitere Informationen zum Konfigurieren von Clientbindungen mit der Konfiguration finden Sie unter Gewusst wie: Angeben einer Clientbindung in einer Konfiguration.

Mit dem behaviorConfiguration-Attribut wird das <behavior> der <endpointBehaviors> angegeben, das vom Endpunkt verwendet werden soll. Sein Wert wird mit dem name-Attribut des <behavior>-Elements abgestimmt. Ein Beispiel zum Angeben von Clientverhaltensweisen mit der Konfiguration finden Sie unter Konfigurieren von Clientverhalten.

Das contract-Attribut gibt den Vertrag an, den dieser Endpunkt verfügbar macht. Dieser Wert wird dem ConfigurationName des ServiceContractAttribute zugeordnet. Der Standardwert ist der vollständige Typname der Klasse, die den Dienst implementiert.

Konfigurieren von Metadaten

Mit dem <metadata>-Element werden Einstellungen zur Registrierung von Metadatenimporterweiterungen angegeben. Weitere Informationen zum Erweitern des Metadatensystems finden Sie unter Erweitern des Metadatensystems.

Siehe auch

Konzepte

Endpunkte: Adressen, Bindungen und Verträge
Konfigurieren von Clientverhalten