Dela via


Beteende för metadatapublicering

Metadataexemplet visar hur du styr publiceringsfunktionerna för metadata i en tjänst. För att förhindra oavsiktligt avslöjande av potentiellt känsliga tjänstmetadata inaktiverar standardkonfigurationen för WCF-tjänster (Windows Communication Foundation) metadatapublicering. Det här beteendet är säkert som standard, men innebär också att du inte kan använda ett verktyg för metadataimport (till exempel Svcutil.exe) för att generera den klientkod som krävs för att anropa tjänsten om inte tjänstens beteende för metadatapublicering uttryckligen är aktiverat i konfigurationen.

Viktigt!

För tydlighetens skull visar det här exemplet hur du skapar en oskyddad slutpunkt för metadatapublicering. Sådana slutpunkter är potentiellt tillgängliga för anonyma oautentiserade konsumenter och försiktighet måste vidtas innan sådana slutpunkter distribueras för att säkerställa att offentligt avslöjande av en tjänsts metadata är lämpligt. Se exempel på slutpunkt för anpassade säkra metadata för ett exempel som skyddar en metadataslutpunkt.

Exemplet baseras på Komma igång, som implementerar tjänstkontraktet ICalculator . I det här exemplet är klienten ett konsolprogram (.exe) och tjänsten hanteras av Internet Information Services (IIS).

Kommentar

Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.

För att en tjänst ska kunna exponera metadata måste den ServiceMetadataBehavior konfigureras för tjänsten. När det här beteendet finns kan du publicera metadata genom att konfigurera en slutpunkt för att exponera IMetadataExchange kontraktet som en implementering av ett MEX-protokoll (WS-MetadataExchange). Som en bekvämlighet har det här kontraktet fått det förkortade konfigurationsnamnet "IMetadataExchange". Det här exemplet använder mexHttpBinding, som är en standardbindning för bekvämlighet som motsvarar wsHttpBinding med säkerhetsläget inställt på None. En relativ adress för "mex" används i slutpunkten, som när den matchas mot tjänstbasadressen resulterar i en slutpunktsadress för http://localhost/servicemodelsamples/service.svc/mex. Följande visar beteendekonfigurationen:

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

Följande visar MEX-slutpunkten.

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

Det här exemplet anger HttpGetEnabled egenskapen till true, som även exponerar tjänstens metadata med HTTP GET. För att aktivera en HTTP GET-metadataslutpunkt måste tjänsten ha en HTTP-basadress. Frågesträngen ?wsdl används på basadressen för tjänsten för att få åtkomst till metadata. Om du till exempel vill se WSDL för tjänsten i en webbläsare använder du adressen http://localhost/servicemodelsamples/service.svc?wsdl. Du kan också använda det här beteendet för att exponera metadata via HTTPS genom att ange HttpsGetEnabled till true. Detta kräver en HTTPS-basadress.

För att få åtkomst till tjänstens MEX-slutpunkt använder du Verktyget för servicemodelmetadata (Svcutil.exe).

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

Detta genererar en klient baserat på tjänstens metadata.

Om du vill komma åt tjänstens metadata med HTTP GET pekar du webbläsaren på http://localhost/servicemodelsamples/service.svc?wsdl.

Om du tar bort det här beteendet och försöker öppna tjänsten får du ett undantag. Det här felet uppstår eftersom slutpunkten som konfigurerats med IMetadataExchange kontraktet inte har någon implementering utan beteende.

Om du anger HttpGetEnabled till falsevisas hjälpsidan för CalculatorService i stället för att se tjänstens metadata.

Så här konfigurerar du, skapar och kör exemplet

  1. Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.

  2. Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.

  3. Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.