Pregunta ASP.NET OutputCache y devoluciones de datos


Estoy tratando de entender el mecanismo de salida de ASP.NET.
Construí una página de prueba con Label y LinkButton.
El texto de la etiqueta se está inicializando en el servidor con la fecha actual del servidor en cada carga de página:

protected void Page_Load(object sender, EventArgs e)  
{  
    lblDate.Text = DateTime.Now.ToString();  
}

Utilicé esta directiva: <%@ OutputCache Duration="600" VaryByParam="none"%>

Cuando presiono el LinkButton la primera vez que recibo un nuevo texto en la etiqueta, si presiona el botón de enlace nuevamente no obtengo un nuevo texto.

Supongo que esto se debe a los parámetros que se transfieren al servidor que son los mismos para cada devolución de datos.

¿Hay alguna manera de trabajar con OutputCach y los controles de devolución de datos?


5
2017-07-21 14:45


origen


Respuestas:


Correcto, lo que pasa es que no se varía en ningún parámetro, por lo que la respuesta de la primera solicitud html se almacena en caché y se sirve durante los próximos 10 minutos (en teoría). Si desea almacenar GET en caché pero procesar POST diferentes, debe variar según sus parámetros POST.

Dejame darte un ejemplo. Tiene una entrada de texto que se utiliza para enviar un correo electrónico con su contenido en POST. Si varía según ese nombre de entrada, cada solicitud dentro del lapso de tiempo de almacenamiento en caché con diferentes valores para esa entrada de texto golpearía su controlador y procesaría el envío del correo electrónico.

En el otro lado, puede variar en *, pero luego perderá el almacenamiento en caché en modo kernel.


6
2017-07-21 15:34



Usted es correcto en sus suposiciones.

La directiva de OutputCache indica al mecanismo de almacenamiento en caché de resultados que almacene en caché todo prestado página para una URL específica, por 600 segundos.

En su ejemplo simple, probablemente no esté utilizando ninguna cadena de consulta, sin embargo, la declaración VaryByParam dentro de la directiva le permite especificar un parámetro de cadena de consulta que garantiza que cada valor diferente de ese parámetro se almacene en caché por separado. Por ejemplo, si tuvieras:

<%@ OutputCache Duration="600" VaryByParam="ProductID"%>

luego, estos tres URL diferentes se almacenarán en caché individualmente, y cambiar el valor del parámetro "ProductID" a algo que aún no esté en caché asegurará que la página sea procesada y representada por el tiempo de ejecución de ASP.NET correctamente:

http://www.example.com/viewproduct.aspx?ProductID=123
http://www.example.com/viewproduct.aspx?ProductID=3
http://www.example.com/viewproduct.aspx?ProductID=67

En su ejemplo, al hacer clic en el botón, la página ya se ha procesado (y guardó en caché) y cuando vuelve a publicar, no hay ninguna diferencia en la URL a la que está publicando y recargando efectivamente, por lo tanto, el tiempo de ejecución de ASP.NET le mostrará la página almacenada en caché sin pasar por el proceso de volver a procesarla.

Además de cambiar el valor de un parámetro "VaryByParam", la directiva OutputCache es bastante un enfoque de "todo o nada" para el almacenamiento en caché de páginas. Sin embargo, existe un atributo "VaryByContol" para la directiva, que solo se puede usar en los controles de usuario de ASP.NET, en lugar de una página web completa de ASP.NET.

De tu pregunta, suena más como si necesitas investigar parcial almacenamiento en caché de páginas. O eso o un mecanismo para invalidar el caché cuando ocurre algún evento. Esto generalmente se hace agregando una "dependencia de caché".

Para eso, los siguientes enlaces deberían ayudar:

Almacenamiento en caché de porciones de una página ASP.NET
Sugerencia / Truco: Implemente "Donut Caching" con la característica de sustitución de caché de salida de ASP.NET 2.0
Eliminación programática de una página de OutputCache


2
2017-07-21 15:16



Lo que necesitas es una sustitución post-caché:

Actualización dinámica de porciones de una página en caché


0
2017-07-21 15:15