SetLastModified выбросит ArgumentOutOfRangeException
, если ваш lastWriteTime
находится в будущем.
Это удастся:
var t1 = DateTime.Now;
Response.Cache.SetLastModified(t1);
Это не удастся:
var t2 = DateTime.Now + new TimeSpan(0, 0, 0, 1);
Response.Cache.SetLastModified(t2);
Декомпиляция System.Web иллюстрирует это:
public void SetLastModified(DateTime date)
{
this.UtcSetLastModified(DateTimeUtil.ConvertToUniversalTime(date));
}
private void UtcSetLastModified(DateTime utcDate)
{
utcDate = new DateTime(utcDate.Ticks - utcDate.Ticks % 10000000L);
if (utcDate > DateTime.UtcNow)
throw new ArgumentOutOfRangeException("utcDate");
if (this._isLastModifiedSet && !(utcDate > this._utcLastModified))
return;
this.Dirtied();
this._utcLastModified = utcDate;
this._isLastModifiedSet = true;
}
Вы генерируете lastWriteTime
на одном сервере, а затем читаете на другом, где между серверами есть расхождение во времени?
Некоторые дополнительные очки:
- Вы также можете видеть, что вам не нужно
ToUniversalTime
, так как фреймворк делает это для вас
- Похоже, что первая строка в
UtcSetLastModified
снижает точность
- Не могу сказать, что вы хотите, чтобы "иерархия ограничений кэширования" была!