因此,我们有一个从不同的应用程序调用的Web服务,它运行数据提取需要一段时间,我们不希望它运行多次。所以我们认为我们可以设置一个HttpContext.Current.Application [“isRunning”]来持久通过所有请求,如:
if ((bool)HttpContext.Current.Application["isRunning"])
它不起作用,因为当另一个应用程序调用web方法时会创建一个新的HttpContext。
除了写入磁盘或AppSettings之外,我没有看到如何通过每次请求持久保存数据,一次只运行一个webmethod实例。我尝试过使用Application,Cache和静态变量,但它们都不会在请求中保持不变。它似乎每次都会创建一个新实例。
阻止创建新实例或通过实例保留数据将解决问题。任何提示?
答案 0 :(得分:0)
请查看以下链接,这些链接提供了有关将Singleton模式与Web服务一起使用的有用信息。
答案 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;