Delen via


Publicatiegedrag voor metagegevens

In het voorbeeld metagegevens ziet u hoe u de publicatiefuncties voor metagegevens van een service kunt beheren. Om onbedoelde openbaarmaking van mogelijk gevoelige servicemetagegevens te voorkomen, schakelt de standaardconfiguratie voor WCF-services (Windows Communication Foundation) het publiceren van metagegevens uit. Dit gedrag is standaard beveiligd, maar betekent ook dat u geen hulpprogramma voor het importeren van metagegevens (zoals Svcutil.exe) kunt gebruiken om de clientcode te genereren die is vereist om de service aan te roepen, tenzij het publicatiegedrag voor metagegevens van de service expliciet is ingeschakeld in de configuratie.

Belangrijk

Voor de duidelijkheid laat dit voorbeeld zien hoe u een onbeveiligd eindpunt voor het publiceren van metagegevens maakt. Dergelijke eindpunten zijn mogelijk beschikbaar voor anonieme niet-geverifieerde consumenten en zorg moeten worden genomen voordat dergelijke eindpunten worden geïmplementeerd om ervoor te zorgen dat de metagegevens van een service openbaar worden weergegeven. Zie het voorbeeld van het aangepaste eindpunt voor beveiligde metagegevens voor een voorbeeld waarmee een metagegevenseindpunt wordt beveiligd.

Het voorbeeld is gebaseerd op aan de slag, waarmee het ICalculator servicecontract wordt geïmplementeerd. In dit voorbeeld is de client een consoletoepassing (.exe) en wordt de service gehost door Internet Information Services (IIS).

Notitie

De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.

Voor een service om metagegevens beschikbaar te maken, moet de ServiceMetadataBehavior service worden geconfigureerd. Wanneer dit gedrag aanwezig is, kunt u metagegevens publiceren door een eindpunt te configureren om het IMetadataExchange contract beschikbaar te maken als een implementatie van een WS-MetadataExchange-protocol (MEX). Als gemak heeft dit contract de verkorte configuratienaam 'IMetadataExchange' gekregen. In dit voorbeeld wordt gebruikgemaakt van de mexHttpBinding, wat een handige standaardbinding is die gelijk is aan de wsHttpBinding binding met de beveiligingsmodus die is ingesteld op None. Een relatief adres van 'mex' wordt gebruikt in het eindpunt, dat wanneer deze wordt omgezet op basis van het basisadres van de services, resulteert in een eindpuntadres van http://localhost/servicemodelsamples/service.svc/mex. Hieronder ziet u de gedragsconfiguratie:

<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>

Hieronder ziet u het MEX-eindpunt.

<!-- 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 dit voorbeeld wordt de HttpGetEnabled eigenschap trueingesteld op, waarmee ook de metagegevens van de service worden weergegeven met HTTP GET. Als u een HTTP GET-metagegevenseindpunt wilt inschakelen, moet de service een HTTP-basisadres hebben. De queryreeks ?wsdl wordt gebruikt op het basisadres van de service voor toegang tot de metagegevens. Als u bijvoorbeeld de WSDL voor de service in een webbrowser wilt zien, gebruikt u het adres http://localhost/servicemodelsamples/service.svc?wsdl. U kunt dit gedrag ook gebruiken om metagegevens via HTTPS beschikbaar te maken door deze instelling in te truestellenHttpsGetEnabled. Hiervoor is een HTTPS-basisadres vereist.

Als u toegang wilt krijgen tot het MEX-eindpunt van de service, gebruikt u het hulpprogramma servicemodelmetagegevenshulpprogramma (Svcutil.exe).

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

Hiermee wordt een client gegenereerd op basis van de metagegevens van de service.

Als u de metagegevens van de service wilt openen met HTTP GET, wijst u uw browser aan.http://localhost/servicemodelsamples/service.svc?wsdl

Als u dit gedrag verwijdert en de service probeert te openen, krijgt u een uitzondering. Deze fout treedt op omdat het eindpunt dat is geconfigureerd met het IMetadataExchange contract, geen implementatie heeft.

Als u deze optie instelt HttpGetEnabledfalse, ziet u de Help-pagina calculatorservice in plaats van de metagegevens van de service te zien.

Het voorbeeld instellen, compileren en uitvoeren

  1. Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.

  2. Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.

  3. Als u het voorbeeld wilt uitvoeren in een configuratie met één of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.