作者:Dflying Chen ( http://dflying.cnblogs.com/ )
對於一些複雜的,需要較長時間完成,並且對實時性要求不是很高的服務,選擇Cache往往是一個有效的提高效率的方法。 .NET的Web Service實作充分考慮了對Cache的需求,您只需要簡單的設定即可啟用Cache。 Atlas中對Web Service的呼叫也可以利用這個Cache機制,以減少伺服器端不必要的開銷。
若要啟用Web Service的Cache,您只需要在WebMethod的宣告中新增下列屬性:
[WebMethod(CacheDuration = 5)]
其中CacheDuration的值代表Cache的時間,單位為秒。
但這種Cache的方法是Web Service提供的,Atlas對此一無所知,每次呼叫還是被傳送給伺服器。所以對於網路上延遲對使用者的影響,這種Cache沒有辦法改善。
讓我們透過一個範例程式進一步了解Web Service的Cache。
先寫一個Web Service,傳回目前時間,並指定CacheDuration為5秒:
[WebService(Namespace = " http://tempuri.org/ ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class CachedWebService : System.Web.Services.WebService
{
[WebMethod(CacheDuration = 5)]
public DateTime GetGurrentTime()
{
return DateTime.Now;
}
}
然後建立一個Atlas頁面,加入ScriptManager並在其中引用這個Web Service:
再加入一些HTML標記用來呼叫這個Web Service並且顯示結果:
最後是JavaScript部分,這裡我們將每個呼叫的結果都顯示到頁面上,以便於分析:
function btnInvoke_onclick() {
CachedWebService.GetGurrentTime(onCompleted);
}
function onCompleted(result) {
$('result').innerHTML += result + "
";
}
下面在瀏覽器中測試一下,在多次點擊按鈕後,結果如下,可以看到Cache的作用:
同時,在Fiddler中可以看到,實際上這些請求還是被傳送到了伺服器,Cache只是伺服器端的實作:
本範例的原始程式碼可以在此下載: