Página de ayuda del servicio web HTTP de WCF

.NET Framework versión 4 proporciona una página de ayuda automática para servicios WEB HTTP de WCF. Esta página de ayuda contiene una lista de descripciones de cada operación, formatos de solicitud y respuesta, así como esquemas. Esta funcionalidad se desactiva de forma predeterminada. Cuando un usuario examina un servicio WEB HTTP de WCF y anexa "/Ayuda" al final de la dirección URL, por ejemplo https://localhost:8000/Customers/Help, aparece una página de ayuda como la siguiente.

Ee230442.edd33e88-2823-4a28-bbaf-fc6871602998(es-es,VS.100).gif

A continuación, el usuario puede hacer clic en cualquier método descrito en la página de ayuda para visualizar la página detallada de esa operación en la que se muestra más información sobre el método, incluidos formatos de mensajes y respuestas de ejemplo. La siguiente imagen es un ejemplo de una página de ayuda para un método.

Ee230442.d22aafe8-f607-478d-9b02-403fedbc77f1(es-es,VS.100).gif

Utilizar la página de ayuda web HTTP de WCF

La página de ayuda WEB HTTP de WCF muestra una breve descripción de cada operación siempre que haya especificado una con DescriptionAttribute. Este atributo toma una cadena que contiene una breve descripción de la operación a la que se aplica. Por ejemplo, el siguiente código muestra cómo utilizar DescriptionAttribute para proporcionar una breve descripción.

[OperationContract]
[WebGet(UriTemplate="/template1", BodyStyle = WebMessageBodyStyle.Bare)]
[Description("Description for GET /template1")]
SyndicationFeedFormatter GetTemplate1();

Para activar la página de ayuda WEB HTTP de WCF, debe agregar un comportamiento de extremo a los extremos del servicio. Esto se puede hacer en la configuración o a través de un código. Para habilitar la página de ayuda WEB HTTP de WCF en la configuración, agregue un comportamiento de extremo con un elemento <webHttp>, establezca enableHelp en true y agregue un extremo y configúrelo para utilizar el comportamiento del extremo. El código de configuración siguiente muestra cómo realizar esta operación.

<endpointBehaviors>
   <behavior name="RESTEndpointBehavior">
      <webHttp enableHelp="true"/>
   </behavior>
</endpointBehaviors>
<!-- ... -->
<services>
   <service behaviorConfiguration="RESTWebServiceBehavior" name="RESTWebService">      <endpoint address="" kind="webHttpEndpoint" behaviorConfiguration="RESTEndpointBehavior" contract="IHello" />
      
      <!-- ... -->
   </service>
</services>

Para habilitar la página de ayuda web HTTP de WCF a través de un código, agregue un extremo de servicio y agregue WebHttpBehavior a la configuración de extremo EnableHelp a true. El código siguiente muestra cómo hacerlo.

using (WebServiceHost host = new WebServiceHost(typeof(Service), new Uri("https://localhost:8000/Customers")))
{
   host.AddServiceEndpoint(typeof(ICustomerCollection), new WebHttpBinding(), "");             
   host.Description.Endpoints[0].Behaviors.Add(new WebHttpBehavior { EnableHelp = true });
   // ...
}

La página de ayuda se basa en XHTML con marcado que identifica las diferentes partes de la página. Esto permite a los clientes tener acceso mediante programación a la página mediante XElement u otros API XLinq.

Esquemas empleados en la página de ayuda del servicio Web HTTP de WCF

En la página de ayuda del servicio Web HTTP de WCF se emplean los siguientes esquemas.

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:tns="https://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="https://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="anyType" nillable="true" type="xs:anyType" />
  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
  <xs:element name="boolean" nillable="true" type="xs:boolean" />
  <xs:element name="byte" nillable="true" type="xs:byte" />
  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
  <xs:element name="decimal" nillable="true" type="xs:decimal" />
  <xs:element name="double" nillable="true" type="xs:double" />
  <xs:element name="float" nillable="true" type="xs:float" />
  <xs:element name="int" nillable="true" type="xs:int" />
  <xs:element name="long" nillable="true" type="xs:long" />
  <xs:element name="QName" nillable="true" type="xs:QName" />
  <xs:element name="short" nillable="true" type="xs:short" />
  <xs:element name="string" nillable="true" type="xs:string" />
  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
  <xs:element name="char" nillable="true" type="tns:char" />
  <xs:simpleType name="char">
    <xs:restriction base="xs:int" />
  </xs:simpleType>
  <xs:element name="duration" nillable="true" type="tns:duration" />
  <xs:simpleType name="duration">
    <xs:restriction base="xs:duration">
      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="guid" nillable="true" type="tns:guid" />
  <xs:simpleType name="guid">
    <xs:restriction base="xs:string">
      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:attribute name="FactoryType" type="xs:QName" />
  <xs:attribute name="Id" type="xs:ID" />
  <xs:attribute name="Ref" type="xs:IDREF" />
</xs:schema>

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:tns="https://microsoft.com/wsdl/types/" elementFormDefault="qualified" targetNamespace="https://microsoft.com/wsdl/types/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="guid">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="char">
    <xs:restriction base="xs:unsignedShort" />
  </xs:simpleType>
</xs:schema>

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import namespace="https://schemas.microsoft.com/2003/10/Serialization/" />
  <xs:complexType name="DateTimeOffset">
    <xs:annotation>
      <xs:appinfo>
        <IsValueType xmlns="https://schemas.microsoft.com/2003/10/Serialization/">true</IsValueType>
      </xs:appinfo>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="DateTime" type="xs:dateTime" />
      <xs:element name="OffsetMinutes" type="xs:short" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="DateTimeOffset" nillable="true" type="tns:DateTimeOffset" />
  <xs:complexType name="DBNull">
    <xs:sequence />
  </xs:complexType>
  <xs:element name="DBNull" nillable="true" type="tns:DBNull" />
</xs:schema>

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:tns="https://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:ser="https://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="https://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import namespace="https://schemas.microsoft.com/2003/10/Serialization/" />
  <xs:complexType name="ArrayOfboolean">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="boolean" type="xs:boolean" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfboolean" nillable="true" type="tns:ArrayOfboolean" />
  <xs:complexType name="ArrayOfchar">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="char" type="ser:char" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfchar" nillable="true" type="tns:ArrayOfchar" />
  <xs:complexType name="ArrayOfdateTime">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="dateTime" type="xs:dateTime" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfdateTime" nillable="true" type="tns:ArrayOfdateTime" />
  <xs:complexType name="ArrayOfdecimal">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="decimal" type="xs:decimal" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfdecimal" nillable="true" type="tns:ArrayOfdecimal" />
  <xs:complexType name="ArrayOfdouble">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="double" type="xs:double" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfdouble" nillable="true" type="tns:ArrayOfdouble" />
  <xs:complexType name="ArrayOffloat">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="float" type="xs:float" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOffloat" nillable="true" type="tns:ArrayOffloat" />
  <xs:complexType name="ArrayOfguid">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="guid" type="ser:guid" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfguid" nillable="true" type="tns:ArrayOfguid" />
  <xs:complexType name="ArrayOfint">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="int" type="xs:int" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfint" nillable="true" type="tns:ArrayOfint" />
  <xs:complexType name="ArrayOflong">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="long" type="xs:long" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOflong" nillable="true" type="tns:ArrayOflong" />
  <xs:complexType name="ArrayOfshort">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="short" type="xs:short" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfshort" nillable="true" type="tns:ArrayOfshort" />
  <xs:complexType name="ArrayOfstring">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfstring" nillable="true" type="tns:ArrayOfstring" />
  <xs:complexType name="ArrayOfduration">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="duration" type="ser:duration" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfduration" nillable="true" type="tns:ArrayOfduration" />
  <xs:complexType name="ArrayOfunsignedInt">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="unsignedInt" type="xs:unsignedInt" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfunsignedInt" nillable="true" type="tns:ArrayOfunsignedInt" />
  <xs:complexType name="ArrayOfunsignedLong">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="unsignedLong" type="xs:unsignedLong" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfunsignedLong" nillable="true" type="tns:ArrayOfunsignedLong" />
  <xs:complexType name="ArrayOfunsignedShort">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="unsignedShort" type="xs:unsignedShort" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfunsignedShort" nillable="true" type="tns:ArrayOfunsignedShort" />
  <xs:complexType name="ArrayOfQName">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="QName" nillable="true" type="xs:QName" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfQName" nillable="true" type="tns:ArrayOfQName" />
</xs:schema>

Para obtener más información sobre el esquema de serialización de contratos de datos, vea Referencia de esquema de contrato de datos.