Vorgehensweise: Konfigurieren einer benutzerdefinierten WS-Metadata Exchange-Bindung

In diesem Artikel wird erläutert, wie Sie eine benutzerdefinierte WS-Metadata-Austauschbindung konfigurieren. Windows Communication Foundation (WCF) enthält vier systemdefinierte Metadatenbindungen, Sie können Jedoch Metadaten mit jeder gewünschten Bindung veröffentlichen. In diesem Artikel wird gezeigt, wie Metadaten mithilfe der wsHttpBinding veröffentlicht werden. Diese Bindung ermöglicht es Ihnen, Metadaten auf eine sichere Weise verfügbar zu machen. Der Code in diesem Artikel basiert auf den Ersten Schritten.

Verwenden einer Konfigurationsdatei

  1. Fügen Sie in der Konfigurationsdatei des Dienstes ein Dienstverhalten hinzu, das das serviceMetadata-Tag enthält:

    <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:

    <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:

    <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:

    <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:

    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 Code

  1. Erstellen Sie eine WSHttpBinding-Bindungsinstanz:

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

    ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);  
    
  3. Fügen Sie einen Dienstendpunkt hinzu, und fügen Sie eine ServiceMetadataBehavior-Instanz hinzu:

    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 hinzu, der die zuvor erstellte WSHttpBinding angibt:

    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:

    <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:

    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 auch