2009-03-22 9 views
2
protected void Page_Load(object sender, EventArgs e) 
{Label1.Text = DateTime.Now.ToString();} 

Si, après avoir compilé cette application nouvellement créée, le navigateur B1 est premier à demander Cache.aspx, puis l'heure affichée à la page reçue est 10.16: 20. Si, après 10 secondes, je rafraîchis Cache.aspx de B1 (en cliquant sur un bouton pour provoquer une publication), alors le temps 10.16.30 apparaîtra, et sur tous les postbacks ultérieurs 10.16.30 seront toujours affichés (jusqu'à 1 s'écoule). Si quelques minutes après B1 demandé pour la première fois Cache.aspx, navigateur B2 également demande la même page, puis lors de la réception de la page pour la première fois , Cache.aspx de B2 affichera l'heure 10.16.20, et sur tous publications ultérieures B2 l'heure 10.16: 30 sera affichée à la place.OutputCache comportement étrange

A) Il semble donc que Asp.net génère deux versions mises en cache de Cache.aspx (code ainsi est exécuté deux fois), une page en cache est donné aux navigateurs qui demandent Cache.aspx pour la première fois, et la deuxième la page mise en cache est donnée aux navigateurs qui actualisent seulement leur Cache.aspx? B) Puisque mon livre n'a jamais mentionné un tel comportement, je me demande si vous avez le même comportement ou si mon environnement Net est à nouveau "unique"?

C) La création de deux copies de même page (exécution ainsi le code deux fois) semble être une perte de temps, alors pourquoi ne Asp.Net fonctionne comme ça - il doit y avoir un raisonnement/avantages derrière elle?

merci

+0

Etes-vous sûr que toutes les URL impliquées sont identiques, même jusqu'au boîtier de caractères? – AnthonyWJones

+0

ASP.NET génère en effet différentes annotations pour différents navigateurs. Je ne suis pas sûr si cela affecte le <% @ OutputCache VaryByParam = "none"%> ou pas. –

+0

> Etes-vous sûr que toutes les URL impliquées sont identiques, même jusqu'au boîtier du personnage? Oui, depuis que je copiais URL d'un navigateur à l'autre > ASP.NET ne génère en effet différents pour les différents navigateurs balises ... Je ne sais pas, je comprends ce que vous dites, mais je firefox dans tous mes testings – SourceC

Répondre

2

Une estimation complète, mais on peut supposer que le cache est isolé par la demande globale (args de chaîne de requête, etc.) ... même si le « none » désactive les paires clé/valeur, sans doute une "GET" est tout simplement considéré comme différent d'un "POST" ??? Essayez les liens simples (<a href...> etc.) plutôt que les boutons ASP.NET.

1

J'ai juste essayé et joué avec un peu et il semble que l'intuition de Marc soit juste, le cache dépend de la méthode (GET/POST).

Mais je me rappelle de ce peu est comme démo (avec ASP.NET 2) et je suis tout à fait sûr que ce n'est pas la façon dont il l'habitude d'être ...
Il pourrait être quelque chose qui a changé dans ASP.NET 3.5 et/ou SP1, mais je n'ai trouvé aucune mention de cela. Quant à savoir à quel point cela est mauvais, je ne suis pas tout à fait sûr, je peux penser à la fois par contre et par contre.

+0

Je suis heureux que ce ne soit pas unique à mon Asp.Net – SourceC

0

si je tente si (IsPostBack) commencer response.cache.setcachebility (nocache) fin

puis sur le bouton cliquez met à jour l'étiquette à chaque fois.