Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el ejemplo metadatos se muestra cómo controlar las características de publicación de metadatos de un servicio. Para evitar la divulgación involuntaria de metadatos de servicio potencialmente confidenciales, 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 significa 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 esté habilitado explícitamente en la configuración.
Importante
Para mayor claridad, en este ejemplo se muestra cómo crear un punto de conexión de publicación de metadatos no seguros. Estos puntos de conexión pueden estar disponibles para consumidores anónimos no autenticados y se debe tener cuidado antes de implementar estos puntos de conexión para asegurarse de que la divulgación pública de los metadatos de un servicio sea adecuada. Consulte Punto de conexión personalizado de metadatos seguro para ver un ejemplo que protege el punto de conexión de metadatos.
La muestra se basa en Primeros pasos, que implementa el contrato de servicio ICalculator
. En este ejemplo, el cliente es una aplicación de consola (.exe) y los Servicios de Internet Information Server (IIS) hospedan el servicio.
Nota:
El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.
Para que un servicio exponga metadatos, ServiceMetadataBehavior debe configurarse en el servicio. Cuando este comportamiento está presente, puede publicar metadatos configurando un punto de conexión para exponer el IMetadataExchange contrato como una implementación de un protocolo WS-MetadataExchange (MEX). Como comodidad, a este contrato se le ha concedido el nombre de configuración abreviado de "IMetadataExchange". En este ejemplo se usa mexHttpBinding
, que es un enlace estándar de uso conveniente equivalente al 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
. A continuación se muestra la configuración de comportamiento:
<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 below. Setting httpGetEnabled to true publishes
the service's WSDL at the <baseaddress>?wsdl, for example,
http://localhost/servicemodelsamples/service.svc?wsdl -->
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
A continuación, se muestra el punto de conexión de MEX.
<!-- 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
previously. -->
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
En este ejemplo, se establece la propiedad HttpGetEnabled a true
, lo que también expone los metadatos del servicio mediante HTTP GET. Para habilitar un punto de conexión de metadatos HTTP GET, el servicio debe tener una dirección base HTTP. La cadena ?wsdl
de consulta se usa en la dirección base del servicio para acceder a los metadatos. Por ejemplo, para ver el WSDL del servicio en un explorador web, usaría la dirección http://localhost/servicemodelsamples/service.svc?wsdl
. Como alternativa, puede usar esta función para exponer metadatos a través de HTTPS estableciendo HttpsGetEnabled en true
. Esto requiere una dirección base HTTPS.
Para acceder al punto de conexión MEX del servicio, use la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe).
svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs
Esto genera un cliente basado en los metadatos del servicio.
Para acceder a los metadatos del servicio mediante HTTP GET, apunte el explorador a http://localhost/servicemodelsamples/service.svc?wsdl
.
Si quita este comportamiento e intenta abrir el servicio, obtendrá una excepción. Este error se produce porque sin el comportamiento, el punto de conexión configurado con el IMetadataExchange
contrato no tiene ninguna implementación.
Si establece HttpGetEnabled
en false
, verá la página de ayuda de CalculatorService en lugar de ver los metadatos del servicio.
Para configurar, compilar y ejecutar el ejemplo
Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.
Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.
Para ejecutar el ejemplo en una configuración de una máquina única o entre máquinas, siga las instrucciones de Ejecución de los ejemplos de Windows Communication Foundation.