Compartir a través de


Cómo: Configurar un enlace de WS-Metadata Exchange Binding personalizado

En este tema se explicará cómo configurar intercambio de WS-Metadata personalizados intercambie el enlace. Windows Communication Foundation (WCF) incluye cuatro enlaces de los metadatos definidos por sistema, pero puede publicar los metadatos utilizando cualquier enlace que desea. En este tema, se mostrará cómo publicar metadatos mediante wsHttpBinding. Este enlace le da la opción de exponer los metadatos de una manera segura. El código de este artículo está basado en Ejemplo de 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 extremo 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 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="https://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 = "https://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 extremo 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="https://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 = "https://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());
    

Vea también

Tareas

Comportamiento de publicación de metadatos
Recuperación de metadatos

Conceptos

Metadatos
Publicación de metadatos
Publicación de extremos de metadatos