Dela via


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

  1. 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>  
    
  2. 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" />
    
  3. Lägg till en metadataslutpunkt som anger mex som adress, wsHttpBinding som bindning och IMetadataExchange som kontrakt:

    <endpoint address="mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange" />  
    
  4. 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"/>  
    
  5. 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

  1. Skapa en WSHttpBinding bindningsinstans:

    WSHttpBinding binding = new WSHttpBinding();  
    
  2. Skapa en ServiceHost instans:

    ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);  
    
  3. 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);  
    
  4. Lägg till en exchange-slutpunkt för metadata och ange den som skapades WSHttpBinding tidigare:

    serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);  
    
  5. 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"/>  
    
  6. 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());  
    

Se även