2014-10-24 6 views
0

Мой веб-сайт возвращает информацию для элементов, которые они берут с диска (с использованием некоторой логики, расположенной в контроллере, поэтому это не просто статические активы). Я попытался оптимизировать его, возвратив 304 для элементов, которые не изменены, путем получения времени записи файла для соответствующего элемента. Теперь, после обновления кода, мое приложение по-прежнему считает, что элемент не обновляется и возвращает 304 - он не понимает, что код приложения изменен, поэтому результат будет другим. Из-за этого пользователи сразу не видят обновление, только после того, как они избавятся от своего кеша. Я хотел бы решить эту проблему, проверив не только «время обновления элемента», но и «время обновления приложения». Есть ли способ получить что-то вроде времени, когда приложение было обновлено? К этому времени я хотел бы видеть максимальный срок обновления всех файлов приложений.Есть ли что-нибудь вроде «времени обновления» для приложения ASP.NET-MVC?

UPD: Как просили пример кода, здесь несколько упрощенный вариант:

public static DateTime? LastKnownDate(this HttpRequestBase request) 
    { 
     if (!string.IsNullOrEmpty(request.Headers["If-Modified-Since"])) 
     { 
      var provider = CultureInfo.InvariantCulture; 
      DateTime date; 
      if (DateTime.TryParse(
       request.Headers["If-Modified-Since"], 
       provider, 
       DateTimeStyles.RoundtripKind, 
       out date)) return date; 
     } 
     return null; 
    } 

    public ActionResult Test(int id) 
    { 
     var path = @"C:\data\" + id; 
     var file = new FileInfo(path); 
     if (!file.Exists) return HttpNotFound(); 
     var date = Request.LastKnownDate(); 
     if (date != null && date >= file.LastWriteTimeUtc) 
     { 
      return Response.NotModified(); 
     } 

     Response.AddHeader("Last-Modified", file.LastWriteTimeUtc.ToString("o")); 
     return File(path, "application/octet-stream"); 
    } 
+0

ли агенты пользователей получать реальный 304 с сервера, или притворяется один, потому что они думают, локальная кешированная копия остается действительной и возвращает ее без запроса сервера? – Albireo

+0

@Albireo, интересно ... знаете ли, если хром обычно подделывает 304? Я тестирую, используя онлайн-версию сервера, ничего особенного ... – ironic

+0

@Albireo, в любом случае Fiddler показывает запрос на сервер ... так что я думаю, что запросы реальны :) – ironic

ответ

0

Я думаю, что нужно что-то вроде HTTP conditional GET. Подробнее в spec.

Это, как вы можете сделать это в ASP.NET: http://optimizeasp.net/conditional-get

Также обратите бабло на: Improving Performance with Output Caching

+1

Благодарим вас за помощь. Условный get - это именно то, что я использую. Я думаю, что я не очень хорошо описывал свою проблему, поэтому я обновил вопрос ... – ironic

 Смежные вопросы

  • Нет связанных вопросов^_^