MetadatenveröffentlichungsverhaltenMetadata Publishing Behavior

Das Beispiel für das Metadatenveröffentlichungsverhalten verdeutlicht, wie die Metadatenveröffentlichungsfunktionen eines Diensts gesteuert werden.The Metadata Publishing Behavior sample demonstrates how to control the metadata publishing features of a service. Um ein unbeabsichtigtes Veröffentlichen von möglicherweise vertraulichen Dienstmetadaten zu vermeiden, wird mit der Standardkonfiguration für Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)-Dienste die Metadatenveröffentlichung deaktiviert.To prevent unintentional disclosure of potentially sensitive service metadata, the default configuration for Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) services disables metadata publishing. Dieses Verhalten ist in der Standardeinstellung sicher, bedeutet aber auch, dass man den zum Aufrufen des Diensts erforderlichen Clientcode nicht mithilfe eines Tools zum Importieren von Metadaten (wie Svcutil.exe) generieren kann. Dies ist nur dann möglich, wenn das Verhalten des Diensts zum Veröffentlichen von Metadaten in der Konfiguration explizit aktiviert ist.This behavior is secure by default, but also means that you cannot use a metadata import tool (such as Svcutil.exe) to generate the client code required to call the service unless the service’s metadata publishing behavior is explicitly enabled in configuration.

Wichtig

Beachten Sie, dass in diesem Beispiel die Erstellung eines ungesicherten Metadaten-Veröffentlichungsendpunkts veranschaulicht wird.For clarity, this sample demonstrates how to create an unsecured metadata publishing endpoint. Solche Endpunkte können für anonyme, nicht authentifizierte Benutzer möglicherweise verfügbar sein. Daher muss beim Bereitstellen solcher Endpunkte sorgfältig darauf geachtet werden, dass das Öffentlichmachen von Metadaten eines Diensts sachgerecht erfolgt.Such endpoints are potentially available to anonymous unauthenticated consumers and care must be taken before deploying such endpoints to ensure that publicly disclosing a service’s metadata is appropriate. Finden Sie unter der benutzerdefinierter sicherer Metadatenendpunkt Beispiel für ein Beispiel, das einen Metadatenendpunkt sichert.See the Custom Secure Metadata Endpoint sample for a sample that secures a metadata endpoint.

Das Beispiel basiert auf der Einstieg, implementiert die ICalculator Dienstvertrag.The sample is based on the Getting Started, which implements the ICalculator service contract. In diesem Beispiel ist der Client eine Konsolenanwendung (.exe), und der Dienst wird von IIS (Internet Information Services, Internetinformationsdienste) gehostet.In this sample, the client is a console application (.exe) and the service is hosted by Internet Information Services (IIS).

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Damit ein Dienst Metadaten verfügbar macht, muss ServiceMetadataBehavior für den Dienst konfiguriert werden.For a service to expose metadata, the ServiceMetadataBehavior must be configured on the service. Wenn dieses Verhalten auftritt, können Sie Metadaten veröffentlichen, indem Sie einen Endpunkt so konfigurieren, dass er den IMetadataExchange-Vertrag als Implementierung eines WS-MEX-(MetadataExchange-)Protokolls verfügbar macht.When this behavior is present, you can publish metadata by configuring an endpoint to expose the IMetadataExchange contract as an implementation of a WS-MetadataExchange (MEX) protocol. Zur besseren Benutzerfreundlichkeit hat dieser Vertrag den abgekürzten Konfigurationsnamen "IMetadataExchange" erhalten.As a convenience, this contract has been given the abbreviated configuration name of "IMetadataExchange". In diesem Beispiel wird mexHttpBinding verwendet. Dies ist eine benutzerfreundliche Standardbindung, die wsHttpBinding mit dem Sicherheitsmodus auf None entspricht.This sample uses the mexHttpBinding, which is a convenience standard binding that is equivalent to the wsHttpBinding with the security mode set to None. Im Endpunkt wird eine relative Adresse von "mex" verwendet, die beim Auflösen der Dienstbasisadresse in einer Endpunktadresse von http://localhost/servicemodelsamples/service.svc/mex resultiert.A relative address of "mex" is used in the endpoint, which when resolved against the services base address results in an endpoint address of http://localhost/servicemodelsamples/service.svc/mex. Im Folgenden wird die Verhaltenskonfiguration gezeigt:The following shows the behavior configuration:

<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 below. Setting httpGetEnabled to true publishes   
           the service's WSDL at the <baseaddress>?wsdl, for example,  
           http://localhost/servicemodelsamples/service.svc?wsdl -->  
      <serviceMetadata httpGetEnabled="True"/>  
      <serviceDebug includeExceptionDetailInFaults="False" />  
    </behavior>  
  </serviceBehaviors>  
</behaviors>  

Im Folgenden wird der MEX-Endpunkt gezeigt:The following shows the MEX endpoint.

<!-- the MEX endpoint is exposed at   
     http://localhost/servicemodelsamples/service.svc/mex   
     To expose the IMetadataExchange contract, you   
     must enable the serviceMetadata behavior as demonstrated                           
     previously. -->  
<endpoint address="mex"  
          binding="mexHttpBinding"  
          contract="IMetadataExchange" />  

In diesem Beispiel wird die HttpGetEnabled-Eigenschaft auf true festgelegt, wodurch auch die Metadaten der Dienste mit HTTP GET verfügbar gemacht werden.This sample sets the HttpGetEnabled property to true, which also exposes the service's metadata using HTTP GET. Um einen HTTP GET-Metadatenendpunkt zu aktivieren, muss der Dienst eine HTTP-Basisadresse haben.To enable an HTTP GET metadata endpoint, the service must have an HTTP base address. Die Abfragezeichenfolge ?wsdl wird auf die Basisadresse des Diensts angewendet, um auf die Metadaten zuzugreifen.The query string ?wsdl is used on the base address of the service to access the metadata. Wenn Sie beispielsweise die WSDL für den Dienst einem Webbrowser anzeigen möchten, verwenden Sie die Adresse http://localhost/servicemodelsamples/service.svc?wsdl.For example, to see the WSDL for the service in a Web browser you would use the address http://localhost/servicemodelsamples/service.svc?wsdl. Alternativ können Sie dieses Verhalten verwenden, um Metadaten durch Festlegen von HttpsGetEnabled auf true über HTTPS verfügbar zu machen.Alternatively, you can use this behavior to expose metadata over HTTPS by setting HttpsGetEnabled to true. Dies erfordert eine HTTPS-Basisadresse.This requires an HTTPS base address.

Der Dienst MEX-Endpunkt verwendet den Zugriff auf die ServiceModel Metadata Utility Tool (Svcutil.exe).To access the service's MEX endpoint use the ServiceModel Metadata Utility Tool (Svcutil.exe).

svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs

Dadurch wird ein Client auf der Grundlage der Metadaten des Diensts generiert.This generates a client based on the service's metadata.

Greifen Sie mit HTTP GET auf die Metadaten des Diensts zu, indem Sie Ihren Browser auf http://localhost/servicemodelsamples/service.svc?wsdl verweisen.To access the service's metadata using HTTP GET, point your browser to http://localhost/servicemodelsamples/service.svc?wsdl.

Wenn Sie dieses Verhalten entfernen und versuchen, den Dienst zu öffnen, erhalten Sie einen Ausnahmefehler.If you remove this behavior and try to open the service you get an exception. Dieser Fehler tritt auf, da der mit dem IMetadataExchange-Vertrag konfigurierte Endpunkt ohne das Verhalten keine Implementierung hat.This error occurs because without the behavior, the endpoint configured with the IMetadataExchange contract has no implementation.

Wenn Sie HttpGetEnabled auf false festlegen, wird anstelle der Metadaten des Diensts die CalculatorService-Hilfeseite angezeigt.If you set HttpGetEnabled to false, you see the CalculatorService help page instead of seeing the service's metadata.

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Services\Behaviors\Metadata

Siehe auchSee Also