如何通过Web服务中的不同Context获取持久数据?

时间:2011-07-07 13:56:03

标签: c# asp.net web-services

因此,我们有一个从不同的应用程序调用的Web服务,它运行数据提取需要一段时间,我们不希望它运行多次。所以我们认为我们可以设置一个HttpContext.Current.Application [“isRunning”]来持久通过所有请求,如:

 if ((bool)HttpContext.Current.Application["isRunning"])

它不起作用,因为当另一个应用程序调用web方法时会创建一个新的HttpContext。

除了写入磁盘或AppSettings之外,我没有看到如何通过每次请求持久保存数据,一次只运行一个webmethod实例。我尝试过使用Application,Cache和静态变量,但它们都不会在请求中保持不变。它似乎每次都会创建一个新实例。

阻止创建新实例或通过实例保留数据将解决问题。任何提示?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您可以使用EnterpriseLibraries缓存块在提取后缓存数据。

http://www.codeproject.com/KB/web-cache/CachingApplicationBlock.aspx

一旦引用了Enterprise Library程序集,只需在web.config中添加几行,然后在服务中使用以下代码即可。

 //Create Instance of CacheManager 
 ICacheManager _objCacheManager = CacheFactory.GetCacheManager();

 AbsoluteTime timeToExpire = new AbsoluteTime(TimeSpan.FromMinutes(60));

        MyData myData = null;
        myData = (MyData)cacheManager.GetData("ref");

        if (myData == null)
        {
            //get the data

            cacheManager.Add("ref", myData, CacheItemPriority.Normal, null, timeToExpire);
        }

        return myData;