Vereinfachte Konfiguration
Das Konfigurieren der Windows Communication Foundation (WCF)-Dienste kann aufwändig sein. Es gibt viele verschiedene Optionen, und es ist nicht immer einfach zu bestimmen, welche Einstellungen erforderlich sind. Konfigurationsdateien erhöhen zwar die Flexibilität von WCF-Diensten, sind jedoch auch die Quelle für viele Probleme, die nur schwer zu ermitteln sind. .NET Framework, Version 4 behandelt diese Probleme und gibt Benutzern die Möglichkeit, den Umfang und die Komplexität der Dienstkonfiguration zu reduzieren.
Vereinfachte Konfiguration
In WCF-Konfigurationsdateien enthält der <system.serviceModel>-Abschnitt ein <service>-Element für jeden gehosteten Dienst. Das <service>-Element enthält eine Auflistung von <endpoint>-Elementen, die die Endpunkte für die einzelnen Dienste und optional ein Satz von Dienstverhalten angeben. Die <endpoint>-Elemente geben die Adresse, die Bindung und den Vertrag, die bzw. der vom Endpunkt verfügbar gemacht wurde, und optional die Bindungskonfiguration und die Endpunktverhalten an. Der Abschnitt <system.serviceModel> enthält auch ein <behaviors>-Element, mit dem Sie Dienst- oder Endpunktverhalten angeben können. Das folgende Beispiel enthält den Abschnitt <system.serviceModel> einer Konfigurationsdatei.
system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name=”MyServiceBehavior”>
<serviceMetadata httpGetEnabled=”true”>
<serviceDebug includeExceptionDetailInFaults=”false”>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name=MyBindingConfig”
maxBufferSize=”100”
maxReceiveBufferSize=”100” />
</basicHttpBinding>
</bindings> <services>
<service behaviorConfiguration=”MyServiceBehavior”
name=”MyService”>
<endpoint address=””
binding=”basicHttpBinding”
contract=”ICalculator”
bindingConfiguration=”MyBindingConfig” />
<endpoint address=”mex”
binding=”mexHttpBinding”
contract=”IMetadataExchange”/>
</service>
</services>
</system.serviceModel>
.NET Framework 4 vereinfacht das Konfigurieren eines WCF-Diensts, indem die Anforderung für das <service>-Element beseitigt wird. Wenn Sie im Abschnitt <service> keine Endpunkte hinzufügen (falls vorhanden) und der Dienst programmgesteuert keine Endpunkte definiert, wird dem Dienst automatisch ein Satz von Endpunkten hinzugefügt, und zwar ein Endpunkt für jede Dienstbasisadresse und für jeden vom Dienst implementierten Vertrag. An jedem dieser Endpunkte entspricht die Endpunktadresse der Basisadresse, die Bindung wird anhand des Basisadressenschemas bestimmt, und der Vertrag ist der Vertrag, der vom Dienst implementiert wird. Falls Sie Endpunkte oder Dienstverhalten angeben und keine Änderungen an den Bindungseinstellungen vornehmen müssen, müssen Sie keine Konfigurationsdatei angeben. Wenn ein Dienst zwei Verträge implementiert und der Host sowohl HTTP- als auch TCP-Transporte zulässt, erstellt der Diensthost vier Standardendpunkte, einen für jeden Vertrag mit den einzelnen Transporten. Um Standardendpunkte zu erstellen, muss der Diensthost wissen, welche Bindungen verwendet werden können. Diese Einstellungen werden in einem <protocolMappings>-Abschnitt innerhalb des Abschnitts <system.serviceModel> angegeben. Der Abschnitt <protocolMappings> enthält eine Liste von Transportprotokollschemas, die Bindungstypen zugeordnet sind. Der Diensthost verwendet die übergebene Basisadresse, um die zu verwendende Bindung zu ermitteln. Im folgenden Beispiel wird das <protocolMappings>-Element verwendet.
Hinweis: |
---|
Unter Internetinformationsdienste (IIS) oder dem Windows-Prozessaktivierungsdienst (WAS) gehostete Dienste verwenden das virtuelle Verzeichnis als Basisadresse. |
<protocolMapping>
<add scheme=”http” binding=”basicHttpBinding” bindingConfiguration=”MyBindingConfiguration”/>
<add scheme=”net.tcp” binding=”netTcpBinding”/>
<add scheme=”net.pipe” binding=”netNamedPipeBinding”/>
<add scheme=”net.msmq” binding=”netMSMQBinding”/>
</protocolMapping>
Im vorherigen Beispiel verwendet ein Endpunkt mit einer Basisadresse, die mit dem Schema "http" beginnt, das BasicHttpBinding-Objekt. Ein Endpunkt mit einer Basisadresse, die mit dem Schema "net.tcp" beginnt, verwendet das NetTcpBinding-Objekt. Sie können Einstellungen in einer lokalen App.config- oder Web.config-Datei überschreiben.
Jedes Element innerhalb des Abschnitts <protocolMappings> muss ein Schema und eine Bindung angeben. Optional kann es ein bindingConfiguration-Attribut angeben, dass eine Bindungskonfiguration im Abschnitt <bindings> der Konfigurationsdatei angibt. Wenn keine bindingConfiguration angegeben wird, wird die anonyme Bindungskonfiguration des entsprechenden Bindungstyps verwendet.
Die Dienstverhalten werden für die Standardendpunkte konfiguriert, indem anonyme <behavior>-Abschnitte innerhalb von <serviceBehaviors>-Abschnitten verwendet werden. Alle unbenannten <behavior>-Elemente innerhalb von <serviceBehaviors> werden verwendet, um Dienstverhalten zu konfigurieren. Die folgende Konfigurationsdatei ermöglicht z. B. die Veröffentlichung von Dienstmetadaten für alle Dienste innerhalb des Hosts.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
</behavior>
</serviceBehaviors>
</behaviors> <!-- No <service> tag is necessary. Default endpoints are added to the service -->
<!-- The service behavior with name="" is picked up by the service -->
</system.serviceModel>
Endpunktverhalten werden konfiguriert, indem anonyme <behavior>-Abschnitte innerhalb von <serviceBehaviors>-Abschnitten verwendet werden.
Das folgende Beispiel zeigt eine Konfigurationsdatei, die der Datei am Anfang dieses Themas ähnelt, in der das vereinfachte Konfigurationsmodell verwendet wird.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults=”false”/>
</behavior>
</serviceBehaviors>
</behaviors> <bindings>
<basicHttpBinding>
<binding maxBufferSize=”100”
maxReceiveBufferSize=”100” />
</basicHttpBinding>
</bindings> <!-- No <service> tag is necessary. Default endpoints will be added to the service -->
<!-- The service behavior with name="" will be picked up by the service -->
<protocolMapping>
<add scheme=”http” binding=”basicHttpBinding” / </protocolMapping>
</system.serviceModel>
Siehe auch
Konzepte
Konfigurieren von Diensten mit Konfigurationsdateien
Konfigurieren von Bindungen für Windows Communication Foundation-Dienste
Konfigurieren der vom System bereitgestellten Bindungen
Weitere Ressourcen
Konfigurieren von Diensten
Configuring Windows Communication Foundation Applications