Vorgehensweise: Konfigurieren einer benutzerdefinierten WS-Metadatenaustausch-BindungHow to: Configure a Custom WS-Metadata Exchange Binding

In diesem Thema wird erläutert, wie Sie eine benutzerdefinierte WS-Metadatenaustausch-Bindung konfigurieren.This topic will explain how to configure a custom WS-Metadata exchange binding. Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) enthält vier vom System definierte Metadatenbindungen, Sie können jedoch Metadaten mit jeder gewünschten Bindung veröffentlichen. includes four system-defined metadata bindings, but you can publish metadata using any binding you want. In diesem Thema wird beschrieben, wie Metadaten mit der wsHttpBinding veröffentlicht werden.This topic will show you how to publish metadata using the wsHttpBinding. Diese Bindung ermöglicht es Ihnen, Metadaten auf eine sichere Weise verfügbar zu machen.This binding gives you the option of exposing metadata in a secure way. Der Code in diesem Artikel wird basierend auf den Einstieg.The code in this article is based on the Getting Started.

Verwenden einer KonfigurationsdateiUsing a configuration file

  1. Fügen Sie in der Konfigurationsdatei des Dienstes ein Dienstverhalten hinzu, das das serviceMetadata-Tag enthält:In the service's configuration file, add a service behavior that contains the serviceMetadata tag:

    <behaviors>  
       <serviceBehaviors>  
         <behavior name="CalculatorServiceBehavior">  
           <serviceMetadata httpGetEnabled="True"/>  
         </behavior>  
       </serviceBehaviors>  
    </behaviors>  
    
  2. Fügen Sie dem Dienst-Tag ein behaviorConfiguration-Attribut hinzu, das auf dieses neue Verhalten verweist:Add a behaviorConfiguration attribute to the service tag that references this new behavior:

    <service        name="Microsoft.ServiceModel.Samples.CalculatorService"  
    behaviorConfiguration="CalculatorServiceBehavior">   
    
  3. Fügen Sie einen Metadatenendpunkt hinzu, der MEX als Adresse, wsHttpBinding als Bindung und IMetadataExchange als Vertrag angibt:Add a metadata endpoint specifying mex as the address, wsHttpBinding as the binding, and IMetadataExchange as the contract:

    <endpoint address="mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange" />  
    
  4. Fügen Sie ein Endpunkt-Tag in der Client-Konfigurationsdatei hinzu, um zu überprüfen, ob der Metadatenaustausch-Endpunkt ordnungsgemäß funktioniert:To verify the metadata exchange endpoint is working correctly add an endpoint tag in the client configuration file:

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  5. Erstellen Sie in der Main()-Methode des Clients eine neue MetadataExchangeClient-Instanz, legen Sie ihre ResolveMetadataReferences-Eigenschaft auf true fest, rufen Sie GetMetadata auf, und durchlaufen Sie dann die Auflistung zurückgegebener Metadaten:In the client's Main() method, create a new MetadataExchangeClient instance, set its ResolveMetadataReferences property to true, call GetMetadata and then iterate through the collection of metadata returned:

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

Konfigurieren durch CodeConfiguring by code

  1. Erstellen einer < xref:System.ServiceModel.WsHttpBinding> Bindungsinstanz:Create a < xref:System.ServiceModel.WsHttpBinding> binding instance:

    WSHttpBinding binding = new WSHttpBinding();  
    
  2. Erstellen Sie eine ServiceHost-Instanz:Create a ServiceHost instance:

    ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);  
    
  3. Fügen Sie einen Dienstendpunkt hinzu, und fügen Sie eine ServiceMetadataBehavior-Instanz hinzu:Add a service endpoint and add a ServiceMetadataBehavior instance:

    serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress);  
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();  
    smb.HttpGetEnabled = true;  
    serviceHost.Description.Behaviors.Add(smb);  
    
  4. Fügen Sie einen Metadatenaustausch-Endpunkt, Angeben der < xref:System.ServiceModel.WsHttpBinding> zuvor erstellt haben:Add a metadata exchange endpoint, specifying the < xref:System.ServiceModel.WsHttpBinding> created earlier:

    serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);  
    
  5. Fügen Sie ein Endpunkt-Tag in der Client-Konfigurationsdatei hinzu, um zu überprüfen, ob der Metadatenaustausch-Endpunkt ordnungsgemäß funktioniert:To verify that the metadata exchange endpoint is working correctly, add an endpoint tag in the client configuration file:

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  6. Erstellen Sie in der Main()-Methode des Clients eine neue MetadataExchangeClient-Instanz, legen Sie die ResolveMetadataReferences-Eigenschaft auf true fest, rufen Sie GetMetadata auf, und durchlaufen Sie dann die Auflistung zurückgegebener Metadaten:In the client's Main() method, create a new MetadataExchangeClient instance, set the ResolveMetadataReferences property to true, call GetMetadata and then iterate through the collection of metadata returned:

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

Siehe auchSee Also

MetadatenveröffentlichungsverhaltenMetadata Publishing Behavior
Metadaten abrufenRetrieve Metadata
MetadatenMetadata
Veröffentlichen von MetadatenPublishing Metadata
Veröffentlichen von MetadatenendpunktenPublishing Metadata Endpoints