Sdílet prostřednictvím


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á mexHttpBindingstandardní 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/mexbodu . 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 HttpGetEnabledfalsemožnost , zobrazí se místo metadat služby stránka nápovědy CalculatorService.

Nastavení, sestavení a spuštění ukázky

  1. Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.

  2. Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.

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