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 true
ingesteld 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 true
stellenHttpsGetEnabled. 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 HttpGetEnabled
false
, ziet u de Help-pagina calculatorservice in plaats van de metagegevens van de service te zien.
Het voorbeeld instellen, compileren en uitvoeren
Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
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.
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.