WCF Web HTTP 服務說明網頁
.NET Framework 4.6.1 會為 WCF WEB HTTP 服務提供自動說明頁面。 此說明頁面會列出每項作業、要求與回應格式和結構描述的說明。 此功能預設為關閉。 當使用者瀏覽 WCF WEB HTTP 服務,且在 URL 結尾附加 "/Help" 時 (例如 http://localhost:8000/Customers/Help
),便會顯示如下列說明頁面的畫面。
使用者可以按一下說明頁面中列出的任何方法,該作業的詳細資訊頁面便會顯示,提供有關該方法的詳細資訊,包括訊息格式和回應範例。 下圖是方法之說明頁面的範例。
使用 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>
helpEnabled
項目加入端點行為,將 true
設為,並加入端點然後將其設定為使用端點行為。 下列組態程式碼示範如何執行這項工作。
<endpointBehaviors>
<behavior name="RESTEndpointBehavior">
<webHttp helpEnabled="true"/>
</behavior>
</endpointBehaviors>
<!-- ... -->
<services>
<service behaviorConfiguration="RESTWebServiceBehavior" name="RESTWebService"> <endpoint address="" kind="webHttpEndpoint" behaviorConfiguration="RESTEndpointBehavior" contract="IHello" />
<!-- ... -->
</service>
</services>
若要在程式碼中啟用 WCF Web HTTP 說明頁面,請加入服務端點,並將 WebHttpBehavior 加入至端點設定,再將 HelpEnabled 設定為 true
。 下列程式碼示範如何執行這項操作。
using (WebServiceHost host = new WebServiceHost(typeof(Service), new Uri("http://localhost:8000/Customers")))
{
host.AddServiceEndpoint(typeof(ICustomerCollection), new WebHttpBinding(), "");
host.Description.Endpoints[0].Behaviors.Add(new WebHttpBehavior { EnableHelp = true });
// ...
}
說明頁面是含有標記的 XHTML 架構,可識別頁面的不同部分。 如此可讓用戶端以程式設計方式,使用 XElement 或其他 XLinq API 存取頁面。
WCF Web HTTP 服務說明頁面中使用的結構描述
WCF Web HTTP 服務說明頁面會使用下列結構描述。
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://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="http://microsoft.com/wsdl/types/" elementFormDefault="qualified" targetNamespace="http://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="http://schemas.microsoft.com/2003/10/Serialization/" />
<xs:complexType name="DateTimeOffset">
<xs:annotation>
<xs:appinfo>
<IsValueType xmlns="http://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="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://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>
如需資料合約序列化結構描述的詳細資訊,請參閱資料合約結構描述參考。