Udostępnij za pośrednictwem


Instrukcje: Konfigurowanie niestandardowego wiązania WS-Metadata Exchange

W tym artykule wyjaśniono, jak skonfigurować niestandardowe powiązanie wymiany metadanych WS. Program Windows Communication Foundation (WCF) zawiera cztery powiązania metadanych zdefiniowanych przez system, ale można publikować metadane przy użyciu dowolnego powiązania. W tym artykule przedstawiono sposób publikowania metadanych przy użyciu elementu wsHttpBinding. To powiązanie zapewnia opcję uwidaczniania metadanych w bezpieczny sposób. Kod w tym artykule jest oparty na artykule Wprowadzenie.

Używanie pliku konfiguracji

  1. W pliku konfiguracji usługi dodaj zachowanie usługi zawierające serviceMetadata tag :

    <behaviors>  
       <serviceBehaviors>  
         <behavior name="CalculatorServiceBehavior">  
           <serviceMetadata httpGetEnabled="True"/>  
         </behavior>  
       </serviceBehaviors>  
    </behaviors>  
    
  2. behaviorConfiguration Dodaj atrybut do tagu usługi, który odwołuje się do tego nowego zachowania:

    <service name="Microsoft.ServiceModel.Samples.CalculatorService"  
    behaviorConfiguration="CalculatorServiceBehavior" />
    
  3. Dodaj punkt końcowy metadanych określający mex jako adres, wsHttpBinding jako powiązanie i IMetadataExchange jako kontrakt:

    <endpoint address="mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange" />  
    
  4. Aby sprawdzić, czy punkt końcowy wymiany metadanych działa poprawnie, dodaj tag punktu końcowego w pliku konfiguracji klienta:

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  5. W metodzie Main() klienta utwórz nowe MetadataExchangeClient wystąpienie, ustaw jego ResolveMetadataReferences właściwość na true, wywołaj GetMetadata metodę , a następnie wykonaj iterację po kolekcji zwróconych metadanych:

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

Konfigurowanie według kodu

  1. WSHttpBinding Utwórz wystąpienie powiązania:

    WSHttpBinding binding = new WSHttpBinding();  
    
  2. Utwórz ServiceHost wystąpienie:

    ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);  
    
  3. Dodaj punkt końcowy usługi i dodaj ServiceMetadataBehavior wystąpienie:

    serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress);  
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();  
    smb.HttpGetEnabled = true;  
    serviceHost.Description.Behaviors.Add(smb);  
    
  4. Dodaj punkt końcowy wymiany metadanych, określając WSHttpBinding utworzony wcześniej:

    serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);  
    
  5. Aby sprawdzić, czy punkt końcowy wymiany metadanych działa prawidłowo, dodaj tag punktu końcowego w pliku konfiguracji klienta:

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  6. W metodzie Main() klienta utwórz nowe MetadataExchangeClient wystąpienie, ustaw ResolveMetadataReferences właściwość na true, wywołaj GetMetadata metodę , a następnie iteruj przez kolekcję zwróconych metadanych:

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

Zobacz też