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 false
visas 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
Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.
Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.
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.