Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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>