保持webmethod输出缓存直到刷新

时间:2015-01-23 18:50:25

标签: asp.net caching asmx webmethod

我有一个ASP.NET页面,其中有一个基于计时器的脚本,在服务器上调用WebMethod。

这是aspx上的脚本:

function AutoRefreshPage() {

    $.ajax({
        type: "POST",
        url: pageUrl + "/GetSomeData",
        data: JSON.stringify({ 
        par1: 'a',
        par2: 'b',
        par3: 'c'
        }),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (response) {
            var objMain = $.parseJSON(response.d);

            // Update data on page...

            // Re-trig method in 30 sec
            setTimeout(AutoRefreshPage, 30000);



        }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) {

            console.log("Error");

            // Re-trig method in 30 sec
            setTimeout(AutoRefreshPage, 30000);

        }
    });

}

以下是网络方法:

namespace MyNameSpace
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ScriptService]
    [System.ComponentModel.ToolboxItem(false)]
    public class AjaxServiceProxy : System.Web.Services.WebService
    {


        [WebMethod(EnableSession = true, CacheDuration = 120)]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string GetSomeData(string par1, string par2, string par3)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();

            // Read from DB (takes abour 10 sec)
            var reply = GetSomeDataFromDB(par1,par2,par3);

            return serializer.Serialize(reply);

        }

    }
}

它猜测缓存是否正常工作......在第一次调用GetSomeData时,数据库被命中并获取数据并保存在缓存中。任何进一步的调用(具有相同的参数值)都会返回缓存的数据。当120秒的缓存期满时,清除缓存并再次从DB读取数据。现在我的问题 - 当调用客户端的数量增加(每个都有基于计时器的刷新)时,很可能在缓存过期之后有几次调用GetSomeData但是在刷新缓存之前。结果将对DB进行多次调用 - 所有数据都读取相同的数据。这就是我在第一时间真正想要避免的 - 使用缓存输出!有没有优雅的方法来避免无效缓存的时间差距?

0 个答案:

没有答案