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

如何防止在ASP.NET web服务中缓存web服务结果?,.net,asp.net,web-services,.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 = nu

在我的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
});

我对其他页面使用建议的技术(使用一些随机值将参数附加到URL),以防止它们被缓存,但是我很惊讶,我需要在web服务调用中使用这种技术,因为在ASP.NET 2.0中默认情况下,这些调用是POST调用,不应该首先缓存。

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

具体来说,Javscript方法:

如何阻止浏览器缓存结果


您是否正在使用ASP.NET ajax?如果是这样,那么我认为您的意思是ajax调用由浏览器缓存。如果是这样,那么看看这个:。

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

在旧版本的IIS上添加

Cache-Control: no-cache 

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

我猜您正在使用IE。。。是一个关于缓存控制的pita


通过使用响应对象,可以逐个请求管理缓存控制标头。请注意,一旦发出响应正文的第一个字节,您就不能修改响应标题。

但我如何才能做到这一点?在客户端上,我使用javascript调用服务。在客户端上,我使用在URL末尾附加“/js”的服务调用时生成的代理代码调用服务。我是否应该更改代理代码,使其在javascript中添加时间/日期?请在问题中添加一个用于调用服务的代码示例如果您不知道如何将其添加到代理代码中,我会将其应用到我的答案=)我从未使用过ap.net web服务代理,因此我猜(但不能确定!)这是一个很好的赌注(非常感谢。还有一个问题,结果首先是如何缓存的?ASP.NET不使用不应该缓存的POST调用吗(好吧,他们在ASP.NET 2.0中更改为默认使用POST)?另外,我看到还有另一个选项可以通过更改[WebMethod]属性(在缓存控制头中不发送缓存)来防止缓存。与在客户端上更改web服务的URL相比,这种方法有哪些优点/缺点?谢谢,我会看一看。但事实上,结果会缓存在所有浏览器中,不仅仅是IE。我知道,但主要的主题是,您正在使用ajax,您可以打开缓存。看看这篇文章,什么是操作系统?win2k3或。。。并让我们知道.NETFramework版本。
Cache-Control: no-cache