Ответ 1
Если у вас есть контроль над сервером, посмотрите здесь для IIS7
В старых версиях IIS добавьте
Cache-Control: no-cache
в заголовки для файла ASMX/SVC (или для всего каталога)
В моем приложении ASP.NET я заметил, что результаты любых вызовов веб-сервисов кэшируются. Я не хочу, чтобы какие-либо результаты были кэшированы, как я могу остановить браузер от кеширования результатов?
Update:
Здесь прокси-код, сгенерированный путем вызова URL-адреса веб-службы, добавляющего '/js', например. /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-адресу с некоторым случайным значением) с другими страницами, чтобы предотвратить их кэширование, но я удивлен, что мне нужно использовать эту технику с вызовом веб-службы, учитывая, что они являются POST-вызовами по умолчанию в ASP.NET 2.0 и не должны кэшироваться в первую очередь.
Если у вас есть контроль над сервером, посмотрите здесь для IIS7
В старых версиях IIS добавьте
Cache-Control: no-cache
в заголовки для файла ASMX/SVC (или для всего каталога)
как я могу запретить браузеру кэшировать результаты?
Может быть, вы используете ASP.NET AJAX? Если так, то я думаю, что вы имеете в виду, что вызовы ajax кэшируются браузером. Если это так, взгляните на это: http://yoavniran.wordpress.com/2010/04/27/ie-caching-ajax-results-how-to-fix/.
Когда вы делаете запрос к веб-службе, добавьте уникальное значение к querystring, например текущую дату и время, преобразованные в числовое значение, это гарантирует, что каждый раз он обрабатывается как уникальный запрос и не кэширует ответы будут иметь место.
В частности, метод 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
Я предполагаю, что вы используете IE... это лаваш для управления кешем.
Заголовок управления кешем может управляться на основе запроса по запросу с использованием объекта ответа. Имейте в виду, что вы не можете изменить заголовок ответа после того, как вы выпустили первый байт тела ответа.