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. A metaadat-végpontot biztonságossá tevő minta egyéni biztonságos metaadat-végpontjának megtekintése.
A minta a szolgáltatásszerződést megvalósító ICalculator
első lépéseken alapul. Ebben a mintában az ügyfél egy konzolalkalmazás (.exe), és a szolgáltatást az Internet Information Services (IIS) üzemelteti.
Feljegyzé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é. Ez a szerződés az "IMetadataExchange" rövidített konfigurációs nevét kapta. Ez a minta egy mexHttpBinding
egyszerű 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/mex
eredmé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?wsdl
kell 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ő true
beállítássalHttpsGetEnabled: . 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 metaadatait, mutasson a böngészőre 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 false
van állítvaHttpGetEnabled
, a Szolgáltatás metaadatai helyett a CalculatorService súgóoldala jelenik meg.
A minta beállítása, összeállítása és futtatása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták egyszeri beállítási eljárását.
A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse a Windows Communication Foundation-minták készítéséhez szükséges utasításokat.
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ásával kapcsolatos utasításokat.