Поделиться через


Страница справки веб-службы HTTP WCF

.NET Framework, версия 4 предоставляет автоматическую справочную страницу для службы WCF WEB HTTP. На этой странице справки приводится описание каждой операции, форматов запроса и ответа, а также схем. По умолчанию эта функциональная возможность отключена. Когда пользователь переходит к службе WCF WEB HTTP и добавляет «/Help» в конце URL-адреса, например https://localhost:8000/Customers/Help, то отображается справочная страница, примерно аналогичная приведенной ниже.

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

Затем пользователь может щелкнуть любой метод из представленных на странице справки. Откроется страница, содержащая подробные сведения о методе, включая форматы сообщений и примеры ответов. На следующем рисунке представлен пример справочной страницы для метода.

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

Использование справочной страницы службы WCF Web HTTP

На справочной странице службы WCF WEB HTTP дано краткое описание для каждой из представленных операций при условии, что оно было определено в DescriptionAttribute. Этот атрибут принимает строку, которая содержит краткое описание операции, для которой он применен. Например, в следующем коде показано, как задать краткое описание с помощью DescriptionAttribute.

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

Чтобы включить справочную страницу службы WCF WEB http, в конечные точки службы необходимо добавить соответствующее поведение. Это можно сделать из кода или через файл конфигурации. Чтобы включить справочную страницу службы WCF WEB HTTP в файле конфигурации, добавьте поведение конечной точки с элементом <webHttp>``enableHelp, установите true в значение, добавьте конечную точку и настройте ее для использования поведения конечной точки. В следующем коде конфигурации показано, как это сделать.

<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>

Чтобы включить справочную страницу службы WCF WEB HTTP из кода, добавьте конечную точку службы и добавьте WebHttpBehavior к параметру конечной точки EnableHelp со значением true. В следующем примере кода показано, как это сделать.

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 });
   // ...
}

Справочная страница построена на основе формата XHTML, где разметка определяет различные части страницы. Это позволяет клиентам производить программный доступ к странице через объект XElement или другие API-интерфейсы XLinq.

Схемы, используемые на справочной странице веб-службы WCF Web HTTP

На справочной странице службы WCF Web HTTP используются следующие схемы.

<?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>

Дополнительные сведения о схеме сериализации контракта данных см. в разделе Справочник по схеме контрактов данных.