前面幾節介紹了REST WCF 3.5的一些基本特性以及使用方式,在WCF4.0的時代,也做了對REST的支援。相比3.5時代,4.0改進體現有如下幾點:
- 增加對路由的支援
- 對緩衝的支援。
- 協助(help)頁面的改進。
- 訊息錯誤處理
- 訊息格式的多樣性如(XML\JSON\ATOM\TEXT\BINARY)
- 簡化操作。
本節講述的重點為如何使用路由註冊REST服務、緩衝以及help頁面
1、使用路由註冊服務。
WCF4.0中新增的路由服務可以協助直接註冊服務,而不再需要SVC的檔案。
需要注意的是,使用路由註冊服務時必須啟動ASP.NET的相容模式。即設定aspNetCompatibilityEnabled=True,並且相應的提供服務介面的類。需要將AspNetCompatibilityRequirements 特性添加到服務類型且同時RequirementsMode 設定為“Allowed”或“Required”。否則服務無法使用。啟動ASP.NET的相容模式,可使用ASP.NET的一些特性。
REST WCF即WCF的WEB編程模型中,我們使用的是WebServiceHost,它是ServiceHost(當您沒有使用 Internet 資訊服務 (IIS) 或 Windows 啟用服務 (WAS) 公開服務時,請使用 ServiceHost 類來配置和公開服務以供用戶端應用程式使用)的衍生類別。如果REST WCF沒有指定服務端點地址,WebServiceHost會在服務的基址中自動為 HTTP 和 HTTPS 基址建立一個預設終結點。如果使用者指明了服務的端點位址,則它不會建立。
WebServiceHostFactory在可動態建立WebServiceHost Web宿主執行個體以響應傳入訊息的託管宿主環境中提供 WebServiceHost 的執行個體的工廠。
而採用路由註冊服務時,使用的就是WebServiceHostFactory。如:
代碼如下:
private void RegisterRoutes(){WebServiceHostFactory webServiceHostFactory = new WebServiceHostFactory();RouteTable.Routes.Add(new ServiceRoute("Service",webServiceHostFactory, typeof(Services)));}
示:"Service"為Services類中提供服務的別名。它指明了Web地址的相對URI。使用服務的時候。它是ServiceRoute構造時必須的。
2、緩衝
REST WCF中,同樣可以通過如同ASP.NET配置緩衝的方式來佈建服務介面的緩衝。如在web.config檔案中做如下配置:
<caching><outputCacheSettings><outputCacheProfiles><add name="RestCahe10" duration="10" varyByParam=""/></outputCacheProfiles></outputCacheSettings></caching>[WebGet(UriTemplate ="/")][AspNetCacheProfile("RestCahe10")]public DateTime GetTime(){return DateTime.Now ;}
注意:varyByParam在緩衝設定中是必須有的。
3、協助頁面
在REST 服務中,已經沒有了WSDL文檔可以供調用者使用。於是,REST中,通過協助頁告知調用者如何使用服務。在F3.5時代,REST WC
就支援協助頁,在4.0中,有了進一步的改進。
啟用協助頁有兩種方式。
1、通過在<endpointBehavior>節點的<behavior>設定。如下:
<behaviors><endpointBehaviors><behavior><webHttp helpEnabled="true"/></behavior></endpointBehaviors></behaviors>
2、通過新增的standardEndpoints節點進行配置。如下:
<standardEndpoints><webHttpEndpoint>--><!-- Configure the WCF REST service base address via the global.asax.cs file and the default endpoint via the attributes on the <standardEndpoint> element below--><!--<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/></webHttpEndpoint></standardEndpoints>
協助頁面如下:
點擊相應的方法進去後,會詳細顯示,此方法所使用的HTTP動作,請求、響應等等資訊。如: