Anvisningar: Konfigurera en Anpassad WS-Metadata Exchange-bindning
I den här artikeln beskrivs hur du konfigurerar en anpassad WS-Metadata Exchange-bindning. Windows Communication Foundation (WCF) innehåller fyra systemdefinierade metadatabindningar, men du kan publicera metadata med valfri bindning. Den här artikeln visar hur du publicerar metadata med hjälp av wsHttpBinding
. Med den här bindningen kan du exponera metadata på ett säkert sätt. Koden i den här artikeln baseras på Komma igång.
Använda en konfigurationsfil
I tjänstens konfigurationsfil lägger du till ett tjänstbeteende som innehåller taggen
serviceMetadata
:<behaviors> <serviceBehaviors> <behavior name="CalculatorServiceBehavior"> <serviceMetadata httpGetEnabled="True"/> </behavior> </serviceBehaviors> </behaviors>
Lägg till ett
behaviorConfiguration
attribut till tjänsttaggen som refererar till det här nya beteendet:<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior" />
Lägg till en metadataslutpunkt som anger mex som adress,
wsHttpBinding
som bindning och IMetadataExchange som kontrakt:<endpoint address="mex" binding="wsHttpBinding" contract="IMetadataExchange" />
Om du vill kontrollera att exchange-slutpunkten för metadata fungerar korrekt lägger du till en slutpunktstagg i klientkonfigurationsfilen:
<endpoint name="MyMexEndpoint" address="http://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
I klientens Main()-metod skapar du en ny MetadataExchangeClient instans, anger dess ResolveMetadataReferences egenskap till
true
, anropar GetMetadata och itererar sedan genom samlingen metadata som returneras:string mexAddress = "http://localhost:8000/servicemodelsamples/service/mex"; MetadataExchangeClient mexClient = new MetadataExchangeClient("MyMexEndpoint"); mexClient.ResolveMetadataReferences = true; MetadataSet mdSet = mexClient.GetMetadata(new EndpointAddress(mexAddress)); foreach (MetadataSection section in mdSet.MetadataSections) Console.WriteLine("Metadata section: " + section.Dialect.ToString());
Konfigurera efter kod
Skapa en WSHttpBinding bindningsinstans:
WSHttpBinding binding = new WSHttpBinding();
Skapa en ServiceHost instans:
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
Lägg till en tjänstslutpunkt och lägg till en ServiceMetadataBehavior instans:
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; serviceHost.Description.Behaviors.Add(smb);
Lägg till en exchange-slutpunkt för metadata och ange den som skapades WSHttpBinding tidigare:
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);
Om du vill kontrollera att exchange-slutpunkten för metadata fungerar korrekt lägger du till en slutpunktstagg i klientkonfigurationsfilen:
<endpoint name="MyMexEndpoint" address="http://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
I klientens Main()-metod skapar du en ny MetadataExchangeClient instans, anger ResolveMetadataReferences egenskapen till
true
, anropar GetMetadata och itererar sedan via samlingen metadata som returneras:string mexAddress = "http://localhost:8000/servicemodelsamples/service/mex"; MetadataExchangeClient mexClient = new MetadataExchangeClient("MyMexEndpoint"); mexClient.ResolveMetadataReferences = true; MetadataSet mdSet = mexClient.GetMetadata(new EndpointAddress(mexAddress)); foreach (MetadataSection section in mdSet.MetadataSections) Console.WriteLine("Metadata section: " + section.Dialect.ToString());