2010-02-03 2 views
3

Я хотел бы сбросить/очистить элемент в кеше, но без сброса приложения или написания специализированной страницы только для этого. т.е. непрограммное решение. Это возможно?Можно ли очистить кэш приложения ASP.NET без сброса AppDomain?

+0

Не волнуйтесь, напишите код;) – Pierreten

ответ

8

Короткий ответ: Нет

ASP.NET Cache не имеет интерфейс администрирования, чтобы управлять ею. Вам нужно будет переработать пул приложений или создать простую страницу, чтобы сделать Delete Items from the Cache in ASP.NET.

EDIT: Вдохновленный на Mick ответ, вы могли бы иметь страницу, как это (RemoveCache.aspx):

<%@ Page Language="C#" %> 
<script runat="server"> 

    void Page_Load(object sender, EventArgs e) 
    { 
     if (String.IsNullOrEmpty(Request.QueryString["name"])) 
     { 
      foreach (DictionaryEntry item in Cache) 
      { 
       Cache.Remove(item.Key.ToString()); 
       Response.Write(item.Key.ToString() + " removed<br />"); 
      } 
     } 
     else 
     { 
      Cache.Remove(Request.QueryString["name"]); 
     } 
    } 

</script> 

Если вы звоните RemoveCache.aspx все кэш будет удален; работает RemoveCache.aspx?name=Products, только Products запись в кэш будет удалена.

+0

Это не сработает. Вы не можете изменять коллекцию в цикле 'foreach'. – SLaks

+0

@Slaks, я просто побежал сюда без серьезных проблем (просто отсутствует .ToString()); можете ли вы подтвердить эту проблему? –

+0

ОК, спасибо ребята. Но для написания нового кода необходимо перезагрузить AppDomain. Я не боюсь писать код, просто хотел сделать это, не перезагружая приложение! – Bryan

1

У вас есть только код VB.NET, но почему бы не цикл через кеш, удаляющий элементы?

For Each de As DictionaryEntry In HttpContext.Current.Cache 

HttpContext.Current.Cache.Remove(DirectCast(de.Key, String)) 

Next 

С уважением

+0

Это не сработает. Вы не можете изменять коллекцию в цикле 'Для каждого'. – SLaks

2
  Dim CacheKeys As New List(Of String) 
      For Each CacheItem As DictionaryEntry In Cache 
       CacheKeys.Add(CacheItem.Key) 
      Next 

      For Each Key As String In CacheKeys 
       Cache.Remove(Key) 
      Next 

Это, кажется, проходят через кэш и удалить элементы, но не очистить кэш ответа. Если вы заходите на веб-страницу с помощью FormsAuthentication, переходите к веб-странице, выходите из системы, а затем просто вводите этот URL-адрес в адресную строку, чтобы он возвращал вас на эту страницу. Когда вы нажимаете на что-либо, он возвращает вас на страницу входа, потому что вы не аутентифицированы, но страница по-прежнему отображается в кеше, даже если кэш очищается при нажатии кнопки выхода из системы. Установка Cachability в NoCache не работает, потому что все GridViews, которые используют событие DataBound, показывают, что истекло при использовании кнопки «Назад». Я все еще ищу подходящее решение для очистки кеша для этого случая.

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