Konfigurieren von Diensten mit Konfigurationsdateien
Das Konfigurieren eines Windows Communication Foundation (WCF)-Diensts mit einer Konfigurationsdatei bietet Ihnen eine flexible Möglichkeit, die Endpunkt- und Dienstverhaltensdaten zum Zeitpunkt der Bereitstellung statt zur Entwurfszeit anzugeben. Dieses Thema beschreibt die dafür verfügbaren grundlegenden Verfahren.
Sie können einen WCF-Dienst mithilfe der .NET Framework-Konfigurationstechnologie konfigurieren. Am häufigsten werden XML-Elemente der Web.config-Datei für eine Internetinformationsdienste (IIS)-Website hinzugefügt, die einen WCF-Dienst hostet. Mithilfe der Elemente können Sie Details ändern, zum Beispiel die Endpunktadressen (die eigentlichen für die Kommunikation mit dem Dienst verwendeten Adressen) für einzelne Computer. Zusätzlich bietet WCF mehrere vom System bereitgestellte Elemente, mit deren Hilfe Sie die grundlegendsten Features eines Diensts auswählen können. In der Praxis ist das Schreiben einer Konfiguration ein wesentlicher Bestandteil beim Programmieren von WCF-Anwendungen.
Weitere Informationen finden Sie unter Konfigurieren von Bindungen für Windows Communication Foundation-Dienste. Eine Liste der am häufigsten verwendeten Elemente finden Sie unter Vom System bereitgestellte Bindungen.
System.Configuration: Web.config und App.config
WCF verwendet das Konfigurationssystem System.Configuration des .NET Framework-Namespaces.
Verwenden Sie für die Konfiguration eines Diensts in Visual Studio entweder die Konfigurationsdatei Web.config oder App.config, um die Einstellungen anzugeben. Die Wahl der Konfigurationsdatei wird durch die Hostumgebung des Diensts bestimmt. Wenn Sie den Dienst in IIS hosten, verwenden Sie eine Web.config-Datei. Bei einer anderen Hostumgebung verwenden Sie eine App.config-Datei.
In Visual Studio werden die gültigen Konfigurationseinstellungen in einer Datei namens App.config gespeichert. Der tatsächlich für die Konfigurationsdatei verwendete Name hängt vom Assemblynamen ab. Einer Assembly mit dem Namen "Cohowinery.exe" ist beispielsweise die Konfigurationsdatei namens "Cohowinery.exe.config" zugeordnet. Sie müssen jedoch nur die Datei App.config ändern. An dieser Datei vorgenommene Änderungen werden bei der Kompilierung automatisch an die tatsächliche Anwendungskonfigurationsdatei weitergegeben.
Bei Verwendung einer App.config-Datei führt das Konfigurationssystem den Inhalt dieser Datei mit dem Inhalt der Datei Machine.config zusammen, sobald die Anwendung gestartet und die Konfiguration übernommen wird. Dieser Mechanismus ermöglicht es, computerweite Einstellungen in der Datei Machine.config zu definieren. Die Datei App.config kann verwendet werden, um Einstellungen in der Datei Machine.config zu überschreiben. Sie können Einstellungen in der Datei Machine.config aber auch sperren, sodass diese verwendet werden. Im Fall der Datei Web.config führt das Konfigurationssystem den Inhalt aller Web.config-Dateien in allen Verzeichnissen zur schließlich verwendeten Konfiguration im Anwendungsverzeichnis zusammen. Weitere Informationen zur Konfiguration und der Priorität der Einstellungen finden Sie in den Themen des System.Configuration-Namespaces.
Hauptabschnitte der Konfigurationsdatei
Die Hauptabschnitte der Konfigurationsdatei umfassen folgende Elemente:
<system.ServiceModel>
<services>
<service>
<endpoint/>
</service>
</services>
<bindings>
<!-- Specify one or more of the system-provided binding elements,
for example, <basicHttpBinding> -->
<!-- Alternatively, <customBinding> elements. -->
<binding>
<!-- For example, a <BasicHttpBinding> element. -->
</binding>
</bindings>
<behaviors>
<!-- One or more of the system-provided or custom behavior elements. -->
<behavior>
<!-- For example, a <throttling> element. -->
</behavior>
</behaviors>
</system.ServiceModel>
Tipp
Die Bindungs- und Verhaltensabschnitte sind optional und nur bei Bedarf enthalten.
Das <services>-Element
Das services-Element enthält die Spezifikationen aller Dienste, die die Anwendung hostet.
Das <service>-Element
Jeder Dienst verfügt über diese Attribute:
- name. Gibt den Typ an, der eine Implementierung eines Dienstvertrags bereitstellt. Angegeben wird ein vollständig qualifizierter Name (Namespace und Typname).
- behaviorConfiguration. Gibt den Namen eines behavior-Elements an, das im behaviors-Element gefunden wurde. Das angegebene Verhalten steuert Aktionen, beispielsweise ob der Dienst Identitätswechsel erlaubt.
- <service> element reference
Das <endpoint>-Element
Jeder Endpunkt benötigt eine Adresse, eine Bindung und einen Vertrag. Diese Elemente werden durch die folgenden Attribute dargestellt:
- address. Gibt den Uniform Resource Identifier (URI) des Diensts an. Er kann als absolute Adresse oder als eine zur Basisadresse des Diensts relative Adresse angegeben werden. Eine leere Zeichenfolge zeigt an, dass der Endpunkt unter der Basisadresse verfügbar ist. Diese Basisadresse wird bei der Erstellung des ServiceHost für den Dienst angegeben.
- binding. Gibt üblicherweise eine vom System bereitgestellte Bindung, beispielsweise WsHttpBinding an, kann aber auch eine benutzerdefinierte Bindung angeben. Die angegebene Bindung bestimmt, welcher Typ von Transport, Sicherheit und Codierung verwendet wird, und ob zuverlässige Sitzungen, Transaktionen oder Streaming unterstützt werden oder aktiviert sind.
- bindingConfiguration. Müssen die Standardwerte einer Bindung geändert werden, kann dies geschehen, indem das entsprechende binding-Element im bindings-Element konfiguriert wird. Diesem Attribut sollte derselbe Wert zugewiesen werden, wie dem name-Attribut des binding-Elements, das verwendet wird, um die Standardwerte zu ändern.
- contract. Gibt die Schnittstelle an, die den Vertrag definiert. Das ist die Schnittstelle, die im CLR-Typ (Common Language Runtime) implementiert ist, der vom name-Attribut des service-Elements angegeben wird.
- <endpoint> element reference
Das <bindings>-Element
Das bindings-Element enthält die Spezifikationen für alle Bindungen, die von jedem in einem Dienst definierten Endpunkt verwendet werden können.
Das <binding>-Element
Die binding-Elemente, die im bindings-Element enthalten sind, können entweder eine der systemeigenen Bindungen (siehe Vom System bereitgestellte Bindungen) oder eine benutzerdefinierte Bindung (siehe Benutzerdefinierte Bindungen) sein. Das binding-Element verfügt über das name-Attribut, das eine Beziehung zwischen der Bindung und dem Endpunkt herstellt, der im bindingConfiguration-Attribut des endpoint-Elements angegeben ist.
Weitere Informationen zum Konfigurieren von Diensten und Clients finden Sie unter Konfigurieren von Windows Communication Foundation-Anwendungen.
Das <behaviors>-Element
Dies ist ein Containerelement für die behavior-Elemente, die das Verhalten eines Diensts definieren.
Das <behavior>-Element
Jedes behavior-Element wird durch ein name-Attribut identifiziert und stellt entweder ein vom System definiertes Verhalten, beispielsweise <throttling>, oder ein benutzerdefiniertes Verhalten bereit.
Gewusst wie: Verwenden von Bindungs- und Verhaltenskonfigurationen
WCF macht es mithilfe eines Verweissystems in der Konfiguration leicht, dass Endpunkte die gleiche Konfiguration verwenden können. Statt einem Endpunkt direkt Konfigurationswerte zuzuweisen, werden bindungsrelevante Konfigurationswerte in bindingConfiguration-Elementen des <binding>
-Abschnitts gruppiert. Eine Bindungskonfiguration ist eine benannte Gruppe von Einstellungen einer Bindung. Endpunkte können dann mithilfe des Namens auf eine bindingConfiguration verweisen.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="myBindingConfiguration1" closeTimeout="00:01:00" />
<binding name="myBindingConfiguration2" closeTimeout="00:02:00" />
</basicHttpBinding>
</bindings>
<services>
<service name="myServiceType">
<endpoint
address="myAddress" binding="basicHttpBinding"
bindingConfiguration="myBindingConfiguration1" />
</service>
</services>
</system.serviceModel>
</configuration>
Das name-Attribut der bindingConfiguration wird im <binding>
-Element festgelegt. Das name-Attribut muss eine eindeutige Zeichenfolge im Bereich des Bindungstyps sein – in diesem Fall von <basicHttpBinding>. Der Endpunkt wird mit der Konfiguration verknüpft, indem das bindingConfiguration-Attribut auf diese Zeichenfolge festgelegt wird.
Eine behaviorConfiguration wird genauso implementiert, wie das folgende Beispiel zeigt.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="myBehavior">
<callbackDebug includeExceptionDetailInFaults="true" />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="NewServiceType">
<endpoint
address="myAddress" behaviorConfiguration="myBehavior"
binding="basicHttpBinding" />
</service>
</services>
</system.serviceModel>
</configuration>
Dieses System ermöglicht es Endpunkten, allgemeine Konfigurationen gemeinsam zu verwenden, ohne dass die Einstellungen neu definiert werden müssen. Wenn ein computerweiter Bereich erforderlich ist, erstellen Sie die Bindungs- oder Verhaltenskonfiguration in Machine.config. Die Konfigurationseinstellungen sind in allen App.config-Dateien verfügbar. Das Configuration Editor Tool (SvcConfigEditor.exe) macht es leicht, Konfigurationen zu erstellen.
Siehe auch
Weitere Ressourcen
Konfigurieren von Windows Communication Foundation-Anwendungen
<service>
<binding>