REST WCF 4.0 新特性簡介
前面幾節介紹了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動作,請求、響應等等信息。如下圖:

浙公網安備 33010602011771號