Chování publikování metadat
Ukázka metadat ukazuje, jak řídit funkce publikování metadat služby. Aby se zabránilo neúmyslnému zpřístupnění potenciálně citlivých metadat služby, výchozí konfigurace pro služby WCF (Windows Communication Foundation) zakáže publikování metadat. Toto chování je ve výchozím nastavení zabezpečené, ale také znamená, že nemůžete použít nástroj pro import metadat (například Svcutil.exe) k vygenerování kódu klienta potřebného k volání služby, pokud není explicitně povolené chování publikování metadat služby v konfiguraci.
Důležité
Pro přehlednost tato ukázka ukazuje, jak vytvořit nezabezpečený koncový bod publikování metadat. Tyto koncové body jsou potenciálně dostupné anonymním neověřeným příjemcům a před nasazením těchto koncových bodů je potřeba zajistit, aby byla veřejně zpřístupněna metadata služby. Ukázku vlastního koncového bodu zabezpečených metadat najdete v ukázce, která zabezpečuje koncový bod metadat.
Ukázka je založená na začínáme, který implementuje ICalculator
kontrakt služby. V této ukázce je klient konzolovou aplikací (.exe) a služba je hostovaná Internetová informační služba (IIS).
Poznámka:
Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.
Aby služba zpřístupnila metadata, ServiceMetadataBehavior musí být ve službě nakonfigurovaná. Pokud toto chování existuje, můžete metadata publikovat tak, že nakonfigurujete koncový bod tak, aby zpřístupnil IMetadataExchange kontrakt jako implementaci protokolu WS-MetadataExchange (MEX). Tento kontrakt má zkrácený název konfigurace "IMetadataExchange". V této ukázce se používá mexHttpBinding
standardní vazba , která je ekvivalentní wsHttpBinding
s režimem zabezpečení nastaveným na None
. V koncovém bodu se používá relativní adresa "mex", která při překladu na základní adresu služeb vede k adrese koncového http://localhost/servicemodelsamples/service.svc/mex
bodu . Následující příklad ukazuje konfiguraci chování:
<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>
Následující příklad ukazuje koncový bod MEX.
<!-- 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" />
Tato ukázka nastaví HttpGetEnabled vlastnost na true
, která také zveřejňuje metadata služby pomocí HTTP GET. Aby bylo možné povolit koncový bod metadat HTTP GET, musí mít služba základní adresu HTTP. Řetězec ?wsdl
dotazu se používá na základní adrese služby pro přístup k metadatům. Chcete-li například zobrazit WSDL pro službu ve webovém prohlížeči, použijte adresu http://localhost/servicemodelsamples/service.svc?wsdl
. Alternativně můžete toto chování použít k zveřejnění metadat přes HTTPS nastavením na HttpsGetEnabledtrue
. To vyžaduje základní adresu HTTPS.
Pro přístup ke koncovému bodu MEX služby použijte nástroj ServiceModel Metadata Utility (Svcutil.exe).
svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs
Tím se vygeneruje klient na základě metadat služby.
Pokud chcete získat přístup k metadatům služby pomocí HTTP GET, nasměrujte prohlížeč na http://localhost/servicemodelsamples/service.svc?wsdl
.
Pokud toto chování odeberete a pokusíte se otevřít službu, zobrazí se výjimka. K této chybě dochází, protože bez chování nemá koncový bod nakonfigurovaný s kontraktem IMetadataExchange
žádnou implementaci.
Pokud nastavíte HttpGetEnabled
false
možnost , zobrazí se místo metadat služby stránka nápovědy CalculatorService.
Nastavení, sestavení a spuštění ukázky
Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.
Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.
Pokud chcete spustit ukázku v konfiguraci s jedním nebo více počítači, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.