Metaadatok közzétételi viselkedése

A metaadat-minta bemutatja, hogyan szabályozható egy szolgáltatás metaadat-közzétételi funkciója. A potenciálisan bizalmas szolgáltatás metaadatainak véletlen közzétételének megakadályozása érdekében a Windows Communication Foundation (WCF) szolgáltatások alapértelmezett konfigurációja letiltja a metaadatok közzétételét. Ez a viselkedés alapértelmezés szerint biztonságos, de azt is jelenti, hogy nem használhat metaadat-importáló eszközt (például Svcutil.exe) a szolgáltatás hívásához szükséges ügyfélkód létrehozásához, kivéve, ha a szolgáltatás metaadat-közzétételi viselkedése kifejezetten engedélyezve van a konfigurációban.

Fontos

Az egyértelműség kedvéért ez a minta bemutatja, hogyan hozható létre nem biztonságos metaadat-közzétételi végpont. Ezek a végpontok potenciálisan elérhetők névtelen, hitelesítés nélküli felhasználók számára, és az ilyen végpontok üzembe helyezése előtt ügyelni kell arra, hogy a szolgáltatás metaadatainak nyilvános közzététele megfelelő legyen. Tekintse meg a Egyéni Biztonságos Metaadat-végpont mintát, amely egy metaadat-végpont biztonságát mutatja be.

A minta a Kezdő lépések-en alapul, amely megvalósítja a ICalculator szolgáltatásszerződést. Ebben a mintában az ügyfél egy konzolalkalmazás (.exe), és a szolgáltatást az Internet Information Services (IIS) üzemelteti.

Megjegyzés:

A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.

Ahhoz, hogy egy szolgáltatás metaadatokat tegyen közzé, konfigurálnia kell a ServiceMetadataBehavior szolgáltatáson. Ha ez a viselkedés jelen van, közzéteheti a metaadatokat egy végpont konfigurálásával, hogy a IMetadataExchange szerződést egy WS-MetadataExchange (MEX) protokoll implementációjaként tegye közzé. Könnyebb kezelhetőség érdekében ez a szerződés az "IMetadataExchange" rövidített konfigurációs nevét kapta. Ez a minta egy mexHttpBindingegyszerű standard kötést használ, amely egyenértékű a wsHttpBinding beállított biztonsági móddal None. A végpontban a "mex" relatív címe használatos, amely a szolgáltatások alapcíme alapján történő feloldás esetén a végpont címét http://localhost/servicemodelsamples/service.svc/mexeredményezi. Az alábbiakban a viselkedéskonfiguráció látható:

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

Az alábbiakban a MEX-végpont látható.

<!-- 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" />

Ez a minta beállítja a HttpGetEnabled tulajdonságot true, amely a szolgáltatás metaadatait is elérhetővé teszi a HTTP GET használatával. A HTTP GET metaadat-végpont engedélyezéséhez a szolgáltatásnak HTTP-alapcímmel kell rendelkeznie. A lekérdezési sztringet ?wsdl a szolgáltatás alapcímén használja a metaadatok eléréséhez. Ha például egy webböngészőben szeretné megtekinteni a szolgáltatás WSDL-ét, akkor a címet http://localhost/servicemodelsamples/service.svc?wsdlkell használnia. Másik lehetőségként ezt a viselkedést használhatja a metaadatok HTTPS-en keresztüli elérhetővé adásával a következő HttpsGetEnabledbeállítássaltrue: . Ehhez HTTPS-alapcímre van szükség.

A szolgáltatás MEX-végpontjának eléréséhez használja a ServiceModel metadata segédprogramot (Svcutil.exe).

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

Ez létrehoz egy ügyfelet a szolgáltatás metaadatai alapján.

Ha HTTP GET használatával szeretné elérni a szolgáltatás metadatáit, nyissa meg a böngészőt a következő címre: http://localhost/servicemodelsamples/service.svc?wsdl.

Ha eltávolítja ezt a viselkedést, és megpróbálja megnyitni a szolgáltatást, kivételt kap. Ez a hiba azért fordul elő, mert a viselkedés nélkül a szerződéssel konfigurált végpont nem rendelkezik implementációval IMetadataExchange .

Ha be HttpGetEnabledvan állítvafalse, a Szolgáltatás metaadatai helyett a CalculatorService súgóoldala jelenik meg.

A példa beállítása, elkészítése és futtatása

  1. Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time beállítási eljárását.

  2. A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse Windows Communication Foundation-mintákcímű témakör utasításait.

  3. Ha a mintát egy vagy több gép közötti konfigurációban szeretné futtatni, kövesse A Windows Communication Foundation-minták futtatásacímű témakör utasításait.