WCF Web HTTP 程式設計物件模型
WCF WEB HTTP 程式設計模型可讓開發人員透過基本 HTTP 要求即可公開 Windows Communication Foundation (WCF) Web 服務,而不需要使用 SOAP。 WCF WEB HTTP 程式設計模型建置在現有 WCF 擴充性模型之上。 這個模型會定義下列類別:
程式設計模型:
通道與發送器基礎結構:
公用程式類別和擴充點:
AspNetCacheProfileAttribute
AspNetCacheProfileAttribute,套用至服務作業時,表示組態檔中的 ASP.NET 輸出快取設定檔,此設定檔應該用來快取 ASP .NET 輸出快取中作業傳來的回應。 此屬性僅採用一個參數,也就是在組態檔中指定快取設定的快取設定檔名稱。
WebGetAttribute
您可以使用 WebGetAttribute 屬性將服務作業標示為回應至 HTTP GET 要求。 這是一種被動作業行為 (IOperationBehavior 方法不會執行任何動作),會將中繼資料新增至作業描述中。 套用 WebGetAttribute 會沒有作用,除非已將在作業描述 (尤其是 WebHttpBehavior) 中尋找此中繼資料的行為新增至服務的行為集合中。 WebGetAttribute 屬性會採用下表所示的選用參數。
參數 | 描述 |
---|---|
BodyStyle |
控制是否要將屬性所套用至的服務作業中,所傳送和接收的要求和回應包裝起來。 |
RequestFormat |
控制格式化要求訊息的方法。 |
ResponseFormat |
控制格式化回應訊息的方法。 |
UriTemplate |
指定 URI 樣板,這個樣板會控制對應至套用屬性之服務作業的 HTTP 要求。 |
WebHttpBinding
WebHttpBinding 類別透過使用 WebMessageEncodingBindingElement,併入了 XML、JSON 和原始二進位資料的支援。 這是由 HttpsTransportBindingElement、HttpTransportBindingElement 和 WebHttpSecurity 物件所組成。 WebHttpBinding 是設計與 WebHttpBehavior 配合使用。
WebInvokeAttribute
WebInvokeAttribute 屬性類似於 WebGetAttribute,但它可用來將服務作業標示為回應至 GET 以外的 HTTP 要求。 這是一種被動作業行為 (IOperationBehavior 方法不會執行任何動作),會將中繼資料新增至作業描述中。 套用 WebInvokeAttribute 會沒有作用,除非已將在作業描述 (尤其是 WebHttpBehavior) 中尋找此中繼資料的行為新增至服務的行為集合中。
WebInvokeAttribute 屬性會採用下表所示的選用參數。
參數 | 描述 |
---|---|
BodyStyle |
控制是否要將屬性所套用至的服務作業中,所傳送和接收的要求和回應包裝起來。 |
Method |
指定服務作業對應至的 HTTP 方法。 |
RequestFormat |
控制格式化要求訊息的方法。 |
ResponseFormat |
控制格式化回應訊息的方法。 |
UriTemplate |
指定 URI 樣板,這個樣板會控制對應至套用屬性之服務作業的 GET 要求。 |
UriTemplate
UriTemplate 類別可讓您定義一組結構類似的 URI。 樣板中則包含兩個部分:路徑和查詢。 路徑則包含一系列以斜線 (/) 分隔的區段。 每個區段都有常值、變數值 (寫在大括號 [{ }] 內,限制為完全符合某個區段的內容) 或必須出現在路徑結尾的萬用字元 (以星號 [*] 表示,會符合路徑其餘部分)。 可以完全省略查詢運算式。 如果出現,會指定一系列非循序的名稱/值組。 查詢運算式的元素可以是常值組 (?x=2) 或變數組 (?x={value})。 不允許使用未成對的值。 WCF WEB HTTP 程式設計模型會在內部使用 UriTemplate,以將特定 URI 或 URI 群組對應至服務作業。
UriTemplateTable
UriTemplateTable 類別表示一組相關聯的 UriTemplate 物件,而這限制為開發人員所選擇的物件。 它可讓您比對候選的統一資源識別元 (URI) 和該組物件中的範本,並擷取與相符範本關聯的資料。 WCF WEB HTTP 程式設計模型會在內部使用 UriTemplateTable,以將特定 URI 或 URI 群組對應至服務作業。
WebServiceHost
WebServiceHost 會擴充 ServiceHost,讓它可更輕鬆裝載非 SOAP Web 式服務。 如果 WebServiceHost 在服務描述中找不到端點,則會自動在服務的基底位址中建立預設端點。 建立預設 HTTP 端點時,WebServiceHost 也會停用 HTTP 說明網頁和 Web 服務描述語言 (WSDL) 的 GET 功能,使中繼資料端點不會干擾預設 HTTP 端點。 WebServiceHost 也會確保所有使用 WebHttpBinding 的端點都已附加必要的 WebHttpBehavior。 最後,WebServiceHost 會自動設定端點的繫結,以在安全虛擬目錄中使用時處理相關聯的網際網路資訊服務 (IIS) 安全性設定。
WebServiceHostFactory
當服務是在網際網路資訊服務 (IIS) 或 Windows Process Activation Service (WAS) 下裝載時,可以使用 WebServiceHostFactory 類別以動態建立 WebServiceHost。 和主應用程式在其中具現化 WebServiceHost 的自我裝載服務不同,透過 IIS 或 WAS 裝載的服務會使用這個類別來建立用於服務的 WebServiceHost。 接收到服務的傳入要求時,就會呼叫 CreateServiceHost(Type, Uri[]) 方法。
WebHttpBehavior
WebHttpBehavior 類別會對服務模型層中的 Web 式服務支援,提供必要的格式器、作業選取器等等。 這個動作會實作為端點行為 (用於與 WebHttpBinding 搭配使用),並可對每個端點指定格式器和作業選取器,因此可讓相同的服務實作可同時公開 SOAP 和 POX 端點。
擴充 WebHttpBehavior
使用一些虛擬方法即可擴充 WebHttpBehavior:GetOperationSelector(ServiceEndpoint)、GetReplyClientFormatter(OperationDescription, ServiceEndpoint)、GetRequestClientFormatter(OperationDescription, ServiceEndpoint)、GetReplyDispatchFormatter(OperationDescription, ServiceEndpoint) 和 GetRequestDispatchFormatter(OperationDescription, ServiceEndpoint)。 開發人員可以從 WebHttpBehavior 衍生類別,並覆寫這些方法以自訂預設行為。
WebScriptEnablingBehavior 是擴充 WebHttpBehavior 的範例。 WebScriptEnablingBehavior 可啟用 Windows Communication Foundation (WCF) 端點,以從瀏覽器型 ASP.NET AJAX 用戶端接收 HTTP 要求。 使用 HTTP POST 的 AJAX 服務是使用此擴充點的範例。
警告
當使用 WebScriptEnablingBehavior 時,UriTemplate 或 WebGetAttribute 屬性內不支援WebInvokeAttribute。
WebHttpDispatchOperationSelector
WebHttpDispatchOperationSelector 類別會使用 UriTemplate 和 UriTemplateTable 類別,以將呼叫分派至服務作業。
相容性
WCF WEB HTTP 程式設計模型不會使用 SOAP 型訊息,因此不會支援 WS-* 通訊協定。 不過,您可以透過兩個不同的端點來公開相同的合約:一個端點使用 SOAP,而另一個端點不使用 SOAP。 請參閱如何:將合約公開給 SOAP 和 Web 用戶端,以查看範例。
安全性
由於 WCF WEB HTTP 程式設計模型不支援 WS-* 通訊協定,要保護 WCF WEB HTTP 程式設計模型上所建置 Web 服務安全的唯一方法,即是運用 SSL 公開服務。 如需使用 IIS 7.0 設定 SSL 的詳細資訊,請參閱如何在 IIS 中實作 SSL。