Konfigurieren von Bindungen für Windows Communication Foundation-Dienste
Beim Erstellen einer Anwendung möchten Sie dem Administrator nach Bereitstellung der Anwendung möglicherweise Entscheidungen mitteilen. Beispielsweise wissen Sie häufig nicht im Voraus, welche Dienstadresse oder welcher URI (Uniform Resource Identifier) verwendet wird. Anstatt eine Adresse fest zu programmieren, sollte diese Aufgabe einem Administrator nach dem Erstellen eines Diensts übergeben werden. Diese Flexibilität wird durch Konfiguration ermöglicht.
Tipp
Zum schnellen Erstellen von Konfigurationsdateien verwenden Sie das ServiceModel Metadata Utility Tool (Svcutil.exe) mit dem /config-Schalter.
Hauptabschnitte
Das Windows Communication Foundation (WCF)-Konfigurationsschema schließt die folgenden drei Hauptabschnitte ein (serviceModel, bindings und services):
<configuration>
<system.serviceModel>
<bindings>
</bindings>
<services>
</services>
<behaviors>
</behaviors>
</system.serviceModel>
</configuration>
ServiceModel-Elemente
Sie können den vom system.ServiceModel -Element umschlossenen Abschnitt zum Konfigurieren eines Diensttyps mit mindestens einem Endpunkt und die Einstellungen eines Diensts verwenden. Jeder Endpunkt kann dann mit einer Adresse, einem Vertrag und einer Bindung konfiguriert werden. Weitere Informationen zu Endpunkten finden Sie unter Übersicht über die Endpunkterstellung.
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.
Das Angeben des basicHttpBinding-Elements zeigt z. B. an, dass HTTP als Transport für einen Endpunkt verwendet wird. Auf diese Weise wird der Endpunkt zur Laufzeit aktiviert, 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 allgemeinen Szenarien verwendet werden. Eine Liste vordefinierter Bindungstypen, die WCF bereitstellt, finden Sie unter Vom System bereitgestellte Bindungen. Wenn keine vordefinierte Bindungsauflistung über die korrekte Kombination von Features verfügt, die eine Dienstanwendung benötigt, können Sie benutzerdefinierte Bindungen erstellen, um den Anforderungen der Anwendung zu entsprechen. Weitere Informationen zu benutzerdefinierten Bindungen finden Sie unter <customBinding>.
In den folgenden vier Beispielen werden die am häufigsten verwendeten Bindungskonfigurationen dargestellt, die zum Einrichten eines WCF-Diensts verwendet werden.
Angeben eines Endpunkts, um einen Bindungstyp zu verwenden
Das erste Beispiel zeigt, wie ein Endpunkt angegeben wird, der mit einer Adresse, einem Vertrag oder einer Bindung konfiguriert wurde.
<service type="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" />
</endpoint>
</service>
In diesem Beispiel gibt das type-Attribut an, für welchen Diensttyp die Konfiguration verwendet wird. Wenn Sie in Ihrem Code einen Dienst mit dem HelloWorld
-Vertrag erstellen, wird er mit allen in der Beispielkonfiguration definierten Endpunkten initialisiert. Wenn die Assembly nur einen Dienstvertrag implementiert, kann das type -Attribut weggelassen werden, da der Dienst den einzigen verfügbaren Typ verwenden. Das Attribut nimmt eine Zeichenfolge, die im Format Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
vorliegen muss
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. 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. Wenn keine Adresse konfiguriert wird, wird angenommen, dass die Basisadresse der Adresse für diesen Endpunkt entspricht.
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 ausgelassen werden.
Das binding-Attribut wählt eine vordefinierte oder benutzerdefinierte Bindung aus, die für diesen speziellen Endpunkt verwendet werden soll. Ein Endpunkt, der eine Bindung nicht explizit auswählt, verwendet die standardmäßige Bindungsauswahl BasicHttpBinding.
Ändern einer vordefinierten Bindung
Im folgenden Beispiel wird eine vordefinierte Bindung geändert und benannt. Sie kann anschließend verwendet werden, um einen beliebigen Endpunkt im Dienst zu konfigurieren. 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 finden Sie im Bindungsabschnitt, und die geänderte Bindung erhält einen eindeutigen Namen, shortTimeout
, der vom name-Attribut festgelegt wird. Diese geänderte Bindung kann jetzt beim Erstellen von Endpunkten durch Festlegen des binding-Attributs im endpoint-Element auf den eindeutigen Namen verwendet werden. Dies ermöglicht Ihnen eine fast unbegrenzte Anzahl von Variationen der Standardbindung.
Tipp
Wenn Sie keine Variationen einer Standardbindung erstellen, müssen Sie das bindingConfiguration-Attribut nicht auf einen Wert festlegen. In diesem Fall wird die unveränderte vordefinierte Bindung verwendet.
<service type="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" />
</endpoint>
</service>
<bindings>
<basicHttpBinding
name="shortTimeout"
receiveTimeout="00:00:01"
/>
</bindings>
Konfigurieren eines Verhaltens für einen Dienst
Im folgenden Beispiel wird ein bestimmtes Verhalten für den Diensttyp konfiguriert. Das metadataPublishing-Element wird zum Aktivieren des ServiceModel Metadata Utility Tools (Svcutil.exe) verwendet, um den Dienst abzufragen und WSDL-Dokumente (Web Services Description Language) aus den Metadaten zu erstellen.
<behaviors>
<behavior name="MetaPlusExceptions" >
<metadataPublishing enableGetWsdl="true" />
</behavior>
</behaviors>
<services>
<service
type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
serviceBehaviorName="MetaPlusExceptions">
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding" />
</endpoint>
</service>
</services>
Die vorangehende Konfiguration ermöglicht einem Client,
svcutil /config:Client.exe.config http://computer:8080/Hello?wsdl
aufzurufen und die Metadaten vom "HelloWorld"-Dienst zu erhalten.
Angeben eines Diensts mit zwei Endpunkten mithilfe unterschiedlicher Bindungswerte
In diesem letzten Beispiel werden zwei Endpunkte für den Hello
-Diensttyp konfiguriert. Jeder Endpunkt verwendet ein anderes benutzerdefiniertes bindingConfiguration -Attribut desselben Bindungstyps (jedes ändert die basicHttpBinding).
<service type="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"
bindingConfiguration="shortTimeout"
</endpoint>
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="Secure"
</endpoint>
</service>
<bindings>
<basicHttpBinding
name="shortTimeout"
timeout="00:00:00:01"
/>
<basicHttpBinding
name="Secure" />
<Security mode="Transport" />
</bindings>
Siehe auch
Konzepte
Vom System bereitgestellte Bindungen
Übersicht über die Endpunkterstellung
Verwenden von Bindungen, um Dienste und Clients zu konfigurieren