Compartir a través de


<serviceMetadata>

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

<<system.serviceModel>>
  <comportamientos>
    <serviceBehaviors>
      Elemento <behavior> de <serviceBehaviors>
        <serviceMetadata>

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

Atributos y elementos

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

Valor de cadena que permite utilizar el enlace en escenarios de HTTP GET para que sea especificado por su nombre.

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 de servicio es "https://localhost:8080/CalculatorService", el HTTP/Obtener la dirección de los metadatos es "https://localhost:8080/CalculatorService?wsdl."

Si esta propiedad es false o la dirección del servicio no se basa en HTTP o HTTPS, “?wsdl” se omite.

httpGetUrl

Un URI que especifica la dirección en la que se publican los metadatos para la recuperación mediante una solicitud HTTP/Get.

httpsGetBinding

Valor de cadena que permite utilizar el enlace en escenarios de HTTPS GET para que sea especificado por su nombre.

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 de servicio es "https://localhost:8080/CalculatorService", el HTTP/Obtener la dirección de los metadatos es "https://localhost:8080/CalculatorService?wsdl."

Si esta propiedad es false o la dirección del servicio no se basa en HTTP o HTTPS, “?wsdl” se omite.

httpsGetUrl

Un 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> de <endpointBehaviors>

Especifica el comportamiento de un elemento.

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 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 generar 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 obtener un ejemplo detallado del código para configurar este comportamiento, vea Metadata Publishing Behavior.

Los atributos httpsGetBinding y httpGetBinding 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. Sólo se admitirán los enlaces con elementos de enlace internos que admiten System.ServiceModel.Channels.IReplyChannel. Además, la propiedad System.ServiceModel.Channels.MessageVersion del enlace debe ser System.ServiceModel.Channels.MessageVersion.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é alojando el servicio. (Para obtener más información, consulte Working with Certificates.) Segundo, agregue este elemento a la configuración de servicio y establezca el atributo httpsGetEnabled en true. Finalmente, establezca el atributo httpsGetUrl en la dirección URL del extremo 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 usando 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 extremo que, cuando se resuelve con los resultados de la dirección base de los servicios resulta en una dirección de extremo de https://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: https://localhost/servicemodelsamples/service.svc  -->
      <endpoint address=""
                binding="wsHttpBinding"
                contract="Microsoft.ServiceModel.Samples.ICalculator" />
      <!-- the mex endpoint is exposed at https://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. https://localhost/servicemodelsamples/service.svc?wsdl -->
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="False" />
      </behavior>
    </serviceBehaviors>
  </behaviors>

</system.serviceModel>

</configuration>

Consulte también

Referencia

ServiceMetadataPublishingElement
ServiceMetadataBehavior

Otros recursos

Security Behaviors in WCF
Metadata Publishing Behavior