У меня возникли странные проблемы с кешем и собрана очень простая .NET-страница с директивой кэша вывода. Однако страница не кэшируется (обновления содержимого при каждом обновлении).Директива .NET OutputCache не работает
У меня есть простой, минимальный сайт нашей CMS (Ektron v. 9.0 SP2), установленный на моем локальном компьютере (Windows 7). В рамках этого проекта веб-сайта я создал простую страницу для проверки выходного кэша. Вот код страницы:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CacheTest.aspx.cs" Inherits="CacheTest" %>
<%@ OutputCache Duration="3600" Location="Server" VaryByParam="None" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Cache Test</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<p><%= DateTime.Now.ToString() %></p>
</div>
</form>
</body>
</html>
Эта страница не кэширует вообще.
На нашей производственной площадке OutputCache вообще не работает, кроме одной тестовой страницы, которая настроена точно так же, как указано выше. Я не могу понять, почему эта страница отличается, и она единственная, которая работает на сервере dev, но при копировании на сайт, запущенный на моем локальном хосте, он больше не работает.
Я заметил, что на нашей производственной площадке использование мастер-страницы, похоже, делает выходной кеш недействительным, хотя на этом сайте localhost я не использую главную страницу, и она по-прежнему не работает.
Где я могу начать искать эту проблему? Я просмотрел параметры IIS и не могу найти никаких очевидных настроек для включения/выключения кэширования на уровне страницы. Я также много раз искал в Интернете и не могу найти кого-либо еще с этой проблемой.
Я пробовал обходной путь в ссылке, и он работал отлично, хотя мне пришлось добавить тест, чтобы проверить, является ли HttpContext.Current значением null в методе PreSendRequestHeaders, чтобы избежать получения исключений при отладке. Печеньки могут объяснить, почему он работает в некоторых ситуациях, а не на веб-сайте производства. – user0474975
Обходной путь, что эта ссылка устранила проблему, но я не могу найти никакого официального объяснения о том, почему MS это сделала или это рискованное решение или нет. Есть идеи? – Lavamantis
Вы хотите использовать кэширование вывода страницы, когда вы обслуживаете одну страницу для всех, кто посещает ваш сайт. Если вы обслуживаете какой-либо пользовательский контент на основе cookie или переменной сеанса, вы не хотите использовать этот код. Опасность состоит в том, что если вы обслуживаете разные материалы для людей на основе их файлов cookie, вы можете подать неправильный контент второму человеку, который обращается к странице. – maddoxej