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 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. Die Elemente <headers> und <identity> sind Teil von EndpointAddress und werden im Thema Adressen behandelt. Der Unterabschnitt Konfigurieren von Metadaten 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. Diese sollen jeweils auf die Elemente <bindings> und <behaviors> in der Clientkonfiguration verweisen, die zum Konfigurieren des jeweiligen Endpunkts verwendet werden soll. 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="http://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<TChannel> oder ClientBase<TChannel> 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 Adressen. Wie bereits erwähnt, sind das <headers>- und das <identity>-Element Teil der EndpointAddress und werden ebenfalls im Thema Adressen 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 Abschnitt <wsHttpBinding>, der angibt, dass der Endpunkt ein 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 die Konfiguration einer Clientbindung finden Sie unter Vorgehensweise: Angeben einer Clientbindung in einer Konfiguration.

Mit dem behaviorConfiguration-Attribut wird das <behavior> von <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