如何防止Web服务结果缓存在ASP.NET Web服务中?

时间:2010-08-23 19:50:57

标签: .net asp.net web-services

在我的ASP.NET应用程序中,我注意到任何Web服务调用的结果都被缓存。我不希望缓存任何结果,如何阻止浏览器缓存结果?

更新

这是通过调用附加'/ js'的Web服务URL生成的代理代码,例如/mywebservice.asmx/js

var MyWebService=function() {
MyWebService.initializeBase(this);
this._timeout = 0;
this._userContext = null;
this._succeeded = null;
this._failed = null;
}
MyWebService.prototype={
SomeWebMethod:function(itemID,succeededCallback, failedCallback, userContext) {
return this._invoke(MyWebService.get_path(), 'SomeWebMethod',false,
{itemID:itemID},succeededCallback,failedCallback,userContext); }}
MyWebService.registerClass('MyWebService',Sys.Net.WebServiceProxy);
MyWebService._staticInstance = new MyWebService();
MyWebService.set_path = function(value) { MyWebService._staticInstance._path = value; }
MyWebService.get_path = function() { return MyWebService._staticInstance._path; }
MyWebService.set_timeout = function(value) { MyWebService._staticInstance._timeout = value; }
MyWebService.get_timeout = function() { return MyWebService._staticInstance._timeout; }
MyWebService.set_defaultUserContext = function(value) { MyWebService._staticInstance._userContext = value; }
MyWebService.get_defaultUserContext = function() { return MyWebService._staticInstance._userContext; }
MyWebService.set_defaultSucceededCallback = function(value) { MyWebService._staticInstance._succeeded = value; }
MyWebService.get_defaultSucceededCallback = function() { return MyWebService._staticInstance._succeeded; }
MyWebService.set_defaultFailedCallback = function(value) { MyWebService._staticInstance._failed = value; }
MyWebService.get_defaultFailedCallback = function() { return MyWebService._staticInstance._failed; }
MyWebService.set_path("/MyWebService.asmx");
MyWebService.SomeWebMethod= function(itemID,onSuccess,onFailed,userContext)
{MyWebService._staticInstance.SomeWebMethod(itemID,onSuccess,onFailed,userContext); }

我使用以下方式调用服务:

MyWebService.SomeWebMethod(
itemID,
function(sender, e)
 {
    // do something
},
function(sender, e)
{
   // handle failure
});

我使用建议的技术(将一个param附加到具有一些随机值的URL)和其他页面以防止它们被缓存,但我很惊讶我需要将此技术用于Web服务调用,考虑到它们默认情况下,它是ASP.NET 2.0中的POST调用,不应该首先缓存。

4 个答案:

答案 0 :(得分:3)

如果您可以控制服务器,请查看IIS7的here

在旧版本的IIS上添加

Cache-Control: no-cache 

到ASMX / SVC文件(或整个目录)的标题

答案 1 :(得分:2)

  

如何阻止浏览器缓存结果?

你是否正在使用ASP.NET ajax?如果是这样,那么我认为你的意思是浏览器会缓存ajax调用。如果是这样,那么请看一下:http://yoavniran.wordpress.com/2010/04/27/ie-caching-ajax-results-how-to-fix/

答案 2 :(得分:1)

当您向Web服务发出请求时,请向查询字符串附加一个唯一值,例如转换为数字值的当前日期和时间,这将确保每次都将其视为唯一请求,并且不会缓存回复将会发生。

特别是Javscript Date.getTime()方法:

var d = new Date();
var uniqueValue = d.getTicks();

// Now append uniqueValue to the querystring you're calling the webservice with
// and it'll ensure the request is treated as unique by the browsers cache

答案 3 :(得分:0)

我猜你正在使用IE ...是关于缓存控制的皮塔饼。

可以使用响应对象在请求的基础上管理缓存控制头。请注意,一旦发出响应正文的第一个字节,就无法修改响应标头。