<serviceMetadata>

Especifica la publicación de metadatos e información asociada del servicio.

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata>

Sintaxis

<serviceMetadata externalMetadataLocation="String"
                 httpGetBinding="String"
                 httpGetBindingConfiguration="String"
                 httpGetEnabled="Boolean"
                 httpGetUrl="String"
                 httpsGetBinding="String"
                 httpsGetBindingConfiguration="String"
                 httpsGetEnabled="Boolean"
                 httpsGetUrl="String"
                 policyVersion="Policy12/Policy15" />

Atributos y elementos

En las siguientes secciones se describen los atributos, los elementos secundarios y los elementos primarios.

Atributos

Atributo Descripción
externalMetadataLocation Un URI que contiene la ubicación de un archivo WSDL que se devuelve al usuario en respuesta a las solicitudes WSDL y MEX en lugar del WSDL generado automáticamente. Cuando no se establece este atributo, se devuelve el WSDL predeterminado. El valor predeterminado es una cadena vacía.
httpGetBinding Cadena que especifica el tipo de enlace que se usará para la recuperación de metadatos a través de HTTP GET. Esta configuración es opcional. Si no se especifica, se usarán los enlaces predeterminados.

Solo se admitirán los enlaces con elementos de enlace internos que admiten IReplyChannel. Además, la propiedad MessageVersion del enlace debe ser None.
httpGetBindingConfiguration Cadena que establece el nombre del enlace que se especifica en el atributo httpGetBinding, que hace referencia a la información de configuración adicional de este enlace. El mismo nombre se debe definir en la sección <bindings>.
httpGetEnabled Un valor boolenao que especifica si publicar los metadatos del servicio para la recuperación utilizando un HTTP/Obtener solicitud. El valor predeterminado es false.

Si no se especifica el atributo httpGetUrl, la dirección en la que se publican los metadatos es la dirección de servicio más un "? wsdl." Por ejemplo, si la dirección del servicio es "http://localhost:8080/CalculatorService, la dirección de metadatos HTTP/Get es http://localhost:8080/CalculatorService?wsdl.

Si esta propiedad es false o la dirección del servicio no se basa en HTTP o HTTPS, se omite "?wsdl".
httpGetUrl URI que especifica la dirección en la que se publican los metadatos para la recuperación mediante una solicitud HTTP/Get. Si se especifica un URI relativo, se tratará como relativo a la dirección base del servicio.
httpsGetBinding Cadena que especifica el tipo de enlace que se usará para la recuperación de metadatos a través de HTTPS GET. Esta configuración es opcional. Si no se especifica, se usarán los enlaces predeterminados.

Solo se admitirán los enlaces con elementos de enlace internos que admiten IReplyChannel. Además, la propiedad MessageVersion del enlace debe ser None.
httpsGetBindingConfiguration Cadena que establece el nombre del enlace que se especifica en el atributo httpsGetBinding, que hace referencia a la información de configuración adicional de este enlace. El mismo nombre se debe definir en la sección <bindings>.
httpsGetEnabled Un valor boolenao que especifica si se van a publicar los metadatos del servicio para la recuperación mediante una solicitud HTTP/Get. El valor predeterminado es false.

Si no se especifica el atributo httpsGetUrl, la dirección en la que se publican los metadatos es la dirección de servicio más un "? wsdl." Por ejemplo, si la dirección del servicio es "https://localhost:8080/CalculatorService, la dirección de metadatos HTTP/Get es https://localhost:8080/CalculatorService?wsdl.

Si esta propiedad es false o la dirección del servicio no se basa en HTTP o HTTPS, se omite "?wsdl".
httpsGetUrl URI que especifica la dirección en la que se publican los metadatos para la recuperación mediante una solicitud HTTPS/Get.
policyVersion Una cadena que especifica la versión de la especificación WS-Policy que se va a usar. Este atributo es del tipo PolicyVersion.

Elementos secundarios

Ninguno

Elementos primarios

Elemento Descripción
<behavior> Especifica un elemento de comportamiento.

Comentarios

Este elemento de configuración permite controlar los metadatos que publican características de un servicio. Para evitar la divulgación involuntaria de metadatos de servicio con información confidencial potencial, la configuración predeterminada para los servicios de Windows Communication Foundation (WCF) deshabilita la publicación de metadatos. Este comportamiento es seguro de forma predeterminada, pero también quiere decir que no puede usar una herramienta de importación de metadatos (como Svcutil.exe) Para compilar el código de cliente necesario para llamar al servicio a menos que el comportamiento de publicación de metadatos del servicio se habilite de manera explícita en la configuración. Con este elemento de configuración, puede habilitar este comportamiento de publicación para su servicio.

Para un ejemplo detallado de cómo configurar este comportamiento, consulte Comportamiento de publicación de metadatos.

Los atributos httpGetBinding y httpsGetBinding opcionales le permiten configurar los enlaces utilizados para la recuperación de metadatos a través de HTTP GET (o HTTPS GET). Si no se especifican, los enlaces predeterminados (HttpTransportBindingElement, en el caso de HTTP y HttpsTransportBindingElement, en el caso de HTTPS) se utilizan según corresponda para la recuperación de metadatos. Observe que no puede utilizar estos atributos con los enlaces WCF integrados. Solo se admitirán los enlaces con elementos de enlace internos que admiten IReplyChannel. Además, la propiedad MessageVersion del enlace debe ser None.

Para reducir la exposición de un servicio a los usuarios malintencionados, es posible proteger la transferencia mediante el mecanismo SSL sobre HTTP (HTTPS). Para realizar esto, debe enlazar primero un certificado X.509 adecuado a un puerto concreto en el equipo que esté hospedando el servicio. (Para más información, consulte Trabajo con certificados). En segundo lugar, agregue este elemento a la configuración del servicio y establezca el atributo httpsGetEnabled en true. Finalmente, establezca el atributo httpsGetUrl en la dirección URL del punto de conexión de metadatos del servicio, tal y como se muestra en el ejemplo siguiente.

<behaviors>
  <serviceBehaviors>
    <behavior name="NewBehavior">
      <serviceMetadata httpsGetEnabled="true"
                       httpsGetUrl="https://myComputerName/myEndpoint" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Ejemplo

El ejemplo siguiente configura un servicio para exponer los metadatos mediante el elemento <serviceMetadata>. También configura un extremo para exponer el contrato IMetadataExchange como una implementación de un protocolo WS-MetadataExchange (MEX). El ejemplo usa mexHttpBinding, que es un enlace estándar de conveniencia equivalente a wsHttpBinding con el modo de seguridad establecido en None. Se utiliza una dirección relativa de "mex" en el punto de conexión que, cuando se resuelve con los resultados de la dirección base de los servicios, resulta en una dirección de punto de conexión de http://localhost/servicemodelsamples/service.svc/mex.

<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService"
               behaviorConfiguration="CalculatorServiceBehavior">
        <!-- This endpoint is exposed at the base address provided by the host: http://localhost/servicemodelsamples/service.svc -->
        <endpoint address=""
                  binding="wsHttpBinding"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />
        <!-- The mex endpoint is exposed at http://localhost/servicemodelsamples/service.svc/mex
             To expose the IMetadataExchange contract, you must enable the serviceMetadata behavior as demonstrated below. -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <!-- The serviceMetadata behavior publishes metadata through the IMetadataExchange contract. When this behavior is
               present, you can expose this contract through an endpoint as shown above. Setting httpGetEnabled to true publishes
               the service's WSDL at the <baseaddress>?wsdl eg. http://localhost/servicemodelsamples/service.svc?wsdl -->
          <serviceMetadata httpGetEnabled="True" />
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Consulte también