<serviceMetadata>

Gibt die Veröffentlichung der Dienstmetadaten und der zugeordneten Informationen an.

Schemahierarchie

<<system.serviceModel>>
  <behaviors>
    <serviceBehaviors>
      <behavior> von <serviceBehaviors>
        <serviceMetadata>

Syntax

<serviceMetadata 
    externalMetadataLocation="String"
    httpGetBinding=”String”    httpGetBindingConfiguration=”String”
    httpGetEnabled="Boolean" 
    httpGetUrl="String"
    httpsGetBinding=”String”    httpsGetBindingConfiguration=”String”
    httpsGetEnabled="Boolean" 
    httpsGetUrl="String"
    policyVersion="Policy12/Policy15"/>

Attribute und Elemente

In den folgenden Abschnitten werden Attribute, untergeordnete Elemente sowie übergeordnete Elemente beschrieben.

Attribute

Attribut Beschreibung

externalMetadataLocation

Ein URI, der den Speicherort einer WSDL-Datei enthält, die dem Benutzer als Antwort auf WSDL- und MEX-Anforderungen statt der automatisch generierten WSDL-Datei zurückgegeben wird. Wenn dieses Attribut nicht festgelegt wird, wird die WSDL-Standarddatei zurückgegeben. Der Standardwert ist eine leere Zeichenfolge.

httpGetBinding

Eine Zeichenfolge, die den Typ der Bindung angibt, die für den Abruf von Metadaten mit HTTP GET verwendet wird. Diese Einstellung ist optional. Wenn nicht angegeben, werden die Standardbindungen verwendet.

Nur Bindungen mit inneren Bindungselementen, die T:System.ServiceModel.Channels.IReplyChannel unterstützen, werden unterstützt. Darüber hinaus muss die P:System.ServiceModel.Channels.MessageVersion-Eigenschaft der Bindung den Wert P:System.ServiceModel.Channels.MessageVersion.None aufweisen.

httpGetBindingConfiguration

Eine Zeichenfolge mit dem Namen der Bindung, die im httpGetBinding-Attribut angegeben ist, das auf die zusätzlichen Konfigurationsinformationen dieser Bindung verweist. Der gleiche Name muss im Abschnitt <bindings> definiert werden.

httpGetEnabled

Ein boolescher Wert, der angibt, ob die Dienstmetadaten zum Abrufen anhand einer HTTP/Get-Anforderung veröffentlicht werden sollen. Die Standardeinstellung ist false.

Falls das httpGetUrl-Attribut nicht angegeben ist, ist die Adresse, an der die Metadaten veröffentlicht werden, die Dienstadresse plus ein "?wsdl". Wenn die Dienstadresse beispielsweise "https://localhost:8080/CalculatorService" lautet, ist die HTTP/GET-Metadatenadresse "https://localhost:8080/CalculatorService? wsdl".

Falls diese Eigenschaft false lautet oder die Adresse des Diensts nicht auf HTTP oder HTTPS basiert, wird "?wsdl" ignoriert.

httpGetUrl

Ein URI, der die Adresse angibt, an der die Metadaten zum Abrufen anhand einer HTTP/Get-Anforderung veröffentlicht werden.

httpsGetBinding

Eine Zeichenfolge, die den Typ der Bindung angibt, die für den Abruf von Metadaten mit HTTPS GET verwendet wird. Diese Einstellung ist optional. Wenn nicht angegeben, werden die Standardbindungen verwendet.

Nur Bindungen mit inneren Bindungselementen, die T:System.ServiceModel.Channels.IReplyChannel unterstützen, werden unterstützt. Darüber hinaus muss die P:System.ServiceModel.Channels.MessageVersion-Eigenschaft der Bindung den Wert P:System.ServiceModel.Channels.MessageVersion.None aufweisen.

httpsGetBindingConfiguration

Eine Zeichenfolge mit dem Namen der Bindung, die im httpsGetBinding-Attribut angegeben ist, das auf die zusätzlichen Konfigurationsinformationen dieser Bindung verweist. Der gleiche Name muss im Abschnitt <bindings> definiert werden.

httpsGetEnabled

Ein boolescher Wert, der angibt, ob die Dienstmetadaten zum Abrufen anhand einer HTTPS/Get-Anforderung veröffentlicht werden sollen. Die Standardeinstellung ist false.

Falls das httpsGetUrl-Attribut nicht angegeben ist, ist die Adresse, an der die Metadaten veröffentlicht werden, die Dienstadresse plus ein "?wsdl". Wenn die Dienstadresse beispielsweise "https://localhost:8080/CalculatorService" lautet, ist die HTTP/GET-Metadatenadresse "https://localhost:8080/CalculatorService? wsdl".

Falls diese Eigenschaft false lautet oder die Adresse des Diensts nicht auf HTTP oder HTTPS basiert, wird "?wsdl" ignoriert.

httpsGetUrl

Ein URI, der die Adresse angibt, an der die Metadaten zum Abrufen anhand einer HTTPS/Get-Anforderung veröffentlicht werden.

policyVersion

Eine Zeichenfolge, die angibt, welche Version der WS-Policy-Spezifikation verwendet wird. Dieses Attribut ist vom Typ PolicyVersion.

Untergeordnete Elemente

None

Übergeordnete Elemente

Element Beschreibung

<behavior> von <endpointBehaviors>

Gibt ein Verhaltenselement an.

Hinweise

Mit diesem Konfigurationselement können Sie die Metadatenveröffentlichungs-Features eines Diensts steuern. Um ein unbeabsichtigtes Veröffentlichen von möglicherweise vertraulichen Dienstmetadaten zu vermeiden, wird mit der Standardkonfiguration für Windows Communication Foundation (WCF)-Dienste die Metadatenveröffentlichung deaktiviert. Dieses Verhalten ist standardmäßig sicher, bedeutet aber auch, dass Sie kein Metadatenimporttool (wie Svcutil.exe) zum Generieren des Clientcodes verwenden können, der zum Aufrufen des Diensts benötigt wird, es sei denn, das Veröffentlichungsverhalten der Dienstmetadaten ist in der Konfiguration ausdrücklich aktiviert. Wenn Sie dieses Konfigurationselement verwenden, können Sie dieses Veröffentlichungsverhalten für Ihren Dienst aktivieren.

Ein ausführliches Codebeispiel für die Konfiguration dieses Verhaltens finden Sie unter Metadata Publishing Behavior.

Das optionale httpGetBinding-Attribut und httpsGetBinding-Attribut ermöglichen Ihnen das Konfigurieren der zum Abrufen der Metadaten über HTTP-GET (oder HTTPS-GET) verwendeten Bindungen. Wenn sie nicht festgelegt sind, werden die Standardbindungen (HttpTransportBindingElement für HTTP und HttpsTransportBindingElement für HTTPS) entsprechend zum Abrufen der Metadaten verwendet. Beachten Sie, dass Sie diese Attribute nicht mit den integrierten WCF-Bindungen verwenden können. Nur Bindungen mit inneren Bindungselementen, die IReplyChannel unterstützen, werden unterstützt. Darüber hinaus muss die MessageVersion-Eigenschaft der Bindung None sein.

Damit der Dienst möglichst gut vor böswilligen Benutzern geschützt wird, können Sie für die Übertragung den HTTPS-Mechanismus (SSL über HTTP) verwenden. Hierfür müssen Sie zunächst ein geeignetes X.509-Zertifikat an einen bestimmten Port des Computers, auf dem der Dienst gehostet wird, binden. (Weitere Informationen finden Sie unter Working with Certificates.) Fügen Sie dann dieses Element der Dienstkonfiguration hinzu, und legen Sie für das httpsGetEnabled-Attribut den Wert true fest. Setzen Sie abschließend wie im folgenden Beispiel gezeigt das httpsGetUrl-Attribut auf den URL des Dienstmetadaten-Endpunkts:

<behaviors>
 <serviceBehaviors>
  <behavior name="NewBehavior">
    <serviceMetadata httpsGetEnabled="true" 
     httpsGetUrl="https://myComputerName/myEndpoint" />
  </behavior>
 </serviceBehaviors>
</behaviors>

Beispiel

Im folgenden Beispiel wird ein Dienst anhand des <serviceMetadata>-Elements konfiguriert, mit dem Metadaten verfügbar gemacht werden. Es wird auch ein Endpunkt konfiguriert, mit dem der IMetadataExchange-Vertrag als Implementierung eines WS-MetadataExchange (MEX)-Protokolls verfügbar gemacht wird. In dem Beispiel wird mexHttpBinding verwendet, eine benutzerfreundliche Standardbindung, die wsHttpBinding entspricht und für die der Sicherheitsmodus auf None festgelegt ist. Im Endpunkt wird eine relative Adresse von "mex" verwendet, die beim Auflösen der Dienstbasisadresse zu einer Endpunktadresse von führt.

<configuration>
<system.serviceModel>
  <services>
    <service 
        name="Microsoft.ServiceModel.Samples.CalculatorService"
        behaviorConfiguration="CalculatorServiceBehavior">
      <!-- This endpoint is exposed at the base address provided by the host: https://localhost/servicemodelsamples/service.svc  -->
      <endpoint address=""
                binding="wsHttpBinding"
                contract="Microsoft.ServiceModel.Samples.ICalculator" />
      <!-- the mex endpoint is exposed at https://localhost/servicemodelsamples/service.svc/mex 
           To expose the IMetadataExchange contract, you 
           must enable the serviceMetadata behavior as demonstrated below -->
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />
    </service>
  </services>

  <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
  <behaviors>
    <serviceBehaviors>
      <behavior name="CalculatorServiceBehavior">
        <!-- The serviceMetadata behavior publishes metadata through 
             the IMetadataExchange contract. When this behavior is 
             present, you can expose this contract through an endpoint 
             as shown above. Setting httpGetEnabled to true publishes 
             the service's WSDL at the <baseaddress>?wsdl
             eg. https://localhost/servicemodelsamples/service.svc?wsdl -->
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="False" />
      </behavior>
    </serviceBehaviors>
  </behaviors>

</system.serviceModel>

</configuration>

Siehe auch

Verweis

ServiceMetadataPublishingElement
ServiceMetadataBehavior

Weitere Ressourcen

Security Behaviors in WCF
Metadata Publishing Behavior