Delen via


Procedure: Een aangepaste WS-Metadata Exchange-binding configureren

In dit artikel wordt uitgelegd hoe u een aangepaste WS-Metadata Exchange-binding configureert. Windows Communication Foundation (WCF) bevat vier door het systeem gedefinieerde metagegevensbindingen, maar u kunt metagegevens publiceren met elke gewenste binding. In dit artikel leest u hoe u metagegevens publiceert met behulp van de wsHttpBinding. Deze binding biedt u de mogelijkheid om metagegevens op een veilige manier beschikbaar te maken. De code in dit artikel is gebaseerd op aan de slag.

Een configuratiebestand gebruiken

  1. Voeg in het configuratiebestand van de service een servicegedrag toe dat de serviceMetadata tag bevat:

    <behaviors>  
       <serviceBehaviors>  
         <behavior name="CalculatorServiceBehavior">  
           <serviceMetadata httpGetEnabled="True"/>  
         </behavior>  
       </serviceBehaviors>  
    </behaviors>  
    
  2. Voeg een behaviorConfiguration kenmerk toe aan de servicetag die verwijst naar dit nieuwe gedrag:

    <service name="Microsoft.ServiceModel.Samples.CalculatorService"  
    behaviorConfiguration="CalculatorServiceBehavior" />
    
  3. Voeg een eindpunt voor metagegevens toe dat mex opgeeft als het adres, wsHttpBinding als de binding en IMetadataExchange als het contract:

    <endpoint address="mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange" />  
    
  4. Als u wilt controleren of het eindpunt voor metagegevensuitwisseling correct werkt, voegt u een eindpunttag toe aan het clientconfiguratiebestand:

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  5. Maak in de methode Main() van de client een nieuw MetadataExchangeClient exemplaar, stel de ResolveMetadataReferences eigenschap in op , roep GetMetadata deze aan trueen herhaal vervolgens de verzameling metagegevens die worden geretourneerd:

    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());  
    

Configureren op basis van code

  1. Een bindingexemplaren WSHttpBinding maken:

    WSHttpBinding binding = new WSHttpBinding();  
    
  2. ServiceHost Een exemplaar maken:

    ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);  
    
  3. Voeg een service-eindpunt toe en voeg een ServiceMetadataBehavior exemplaar toe:

    serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress);  
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();  
    smb.HttpGetEnabled = true;  
    serviceHost.Description.Behaviors.Add(smb);  
    
  4. Voeg een eindpunt voor metagegevensuitwisseling toe, waarbij u het WSHttpBinding eerder gemaakte eindpunt opgeeft:

    serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);  
    
  5. Als u wilt controleren of het eindpunt voor metagegevensuitwisseling correct werkt, voegt u een eindpunttag toe aan het clientconfiguratiebestand:

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  6. Maak in de main()-methode van de client een nieuw MetadataExchangeClient exemplaar, stel de eigenschap truein op , roep GetMetadata deze ResolveMetadataReferences aan en herhaal de verzameling metagegevens die worden geretourneerd:

    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());  
    

Zie ook