Compartir a través de


Procedimiento para configurar un enlace de WS-Metadata Exchange personalizado

En este artículo se explica cómo configurar un enlace personalizado de WS-Metadata Exchange. Aunque con la infraestructura Windows Communication Foundation (WCF) se incluyen cuatro enlaces de metadatos definidos por el sistema, también se puede publicar metadatos mediante cualquier enlace que desee usar. En este artículo, se mostrará cómo publicar metadatos mediante el enlace wsHttpBinding. Este enlace le da la opción de exponer los metadatos de una manera segura. El código de este artículo se basa en la Introducción.

El uso de un archivo de configuración

  1. En el archivo de configuración del servicio, agregue un comportamiento del servicio que contenga la etiqueta serviceMetadata:

    <behaviors>  
       <serviceBehaviors>  
         <behavior name="CalculatorServiceBehavior">  
           <serviceMetadata httpGetEnabled="True"/>  
         </behavior>  
       </serviceBehaviors>  
    </behaviors>  
    
  2. Agregue un atributo behaviorConfiguration a la etiqueta del servicio que hace referencia a este nuevo comportamiento:

    <service name="Microsoft.ServiceModel.Samples.CalculatorService"  
    behaviorConfiguration="CalculatorServiceBehavior" />
    
  3. Agregue un punto de conexión de metadatos que especifique mex como dirección, wsHttpBinding como enlace, y IMetadataExchange como contrato:

    <endpoint address="mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange" />  
    
  4. Para comprobar que el punto de conexión de intercambio de metadatos esté funcionando correctamente, agregue una etiqueta de punto de conexión en el archivo de configuración del cliente, de la siguiente manera:

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  5. En el método Main () del cliente, cree una nueva instancia MetadataExchangeClient, establezca su propiedad ResolveMetadataReferences en true, llame GetMetadata y, a continuación, recorra en iteración la colección de metadatos devuelta:

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

Configurar por código

  1. Cree una instancia de enlace WSHttpBinding:

    WSHttpBinding binding = new WSHttpBinding();  
    
  2. Cree una instancia ServiceHost.

    ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);  
    
  3. Agregue un extremo de servicio y agregue una instancia ServiceMetadataBehavior:

    serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress);  
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();  
    smb.HttpGetEnabled = true;  
    serviceHost.Description.Behaviors.Add(smb);  
    
  4. Agregue un punto de conexión de intercambio de metadatos, especificando WSHttpBinding creado anteriormente:

    serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);  
    
  5. Para comprobar que el extremo de intercambio de metadatos está funcionando correctamente, agregue una etiqueta de extremo en el archivo de configuración del cliente:

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  6. En el método Main () del cliente, cree una nueva instancia MetadataExchangeClient, establezca la propiedad ResolveMetadataReferences en true, llame GetMetadata y, a continuación, recorra en iteración la colección de metadatos devuelta:

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

Consulte también