2008-12-23 7 views
1

cela semble si stupide - je dois manquer quelque chose d'évident. J'ai le code suivant (tout comme un test):Comment désactiver Response.Buffer

<%@ Page Language="C#" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 
    void page_load(object o, EventArgs e) 
    { 
     Response.Write(new string(' ', 255)); 
     Response.Flush(); 
     for (int i = 0; i < 10; i++) 
     { 
      Response.Write(i + "<BR>"); 
      Response.Flush(); 
      System.Threading.Thread.Sleep(500); 
     } 

    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     main div 
    </div> 
    </form> 
</body> 
</html> 

quand je teste ce local (Vista x64, cassini), i obtenir la sortie désirée .. 1, puis 2, puis 3, etc sont tous envoyés non-buffered au navigateur. quand j'essaye ceci sur le serveur de dev (2003, iis6) il tamponne juste tout et l'envoie tout à la fois. Y at-il quelque chose d'évident que je manque? J'ai aussi essayé de mettre buffer = false en haut mais cela ne change pas non plus ce comportement. Pour clarifier davantage, j'ai fait un test avec fiddler pour comparer deux serveurs. le premier serveur est un serveur local sur le réseau local, le second est un serveur public. fiddler n'a trouvé aucune différence perceptible entre les deux, à l'exception du nom d'hôte. le serveur LAN n'a pas écrit la réponse jusqu'à ce que la page ait fini de charger, le serveur public a écrit la réponse comme elle s'est produite. Je peux aussi confirmer que ce comportement se produit à la fois dans firefox et ie.

+0

Est-ce qu'il est mis en cache sur la machine spécifique, vous êtes confronté à un problème? Essayez d'effacer le cache du navigateur sur l'ordinateur problématique. – shahkalpesh

+0

J'ai essayé différentes machines, y compris des machines qui n'auraient jamais accédé à la page auparavant - et pas de proxy .. – benpage

Répondre

1

je mets mes 2 cents que lorsque vous accédez au site public, vous exécutez par un proxy Web, et c'est là est mise en mémoire cache le contenu.

4

Essayez ceci dans Page_Load:

Response.BufferOutput = false; 

pouvez également obtenir une copie de Fiddler et regarder votre conversation HTTP pour vous assurer que votre page n'est pas mis en mémoire cache. Vous pouvez également programmer le navigateur pour qu'il abandonne le cache de la page sélectionnée (bien que ce soit au navigateur d'honorer réellement votre directive).

+0

merci dave - j'essaierai maintenant Fiddler. J'ai oublié de mentionner que j'ai aussi essayé BufferOutput = false mais cela n'a pas non plus fait de différence. – benpage

+0

certainement pas mis en cache. – benpage

0

Public Sub KillCache() 
    Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache) 
    Response.Cache.SetExpires(New Date(1900, 1, 1)) 
    Response.Cache.SetMaxAge(New TimeSpan(0, 0, 5)) '// 5 SECONDS' 
    Response.Cache.SetNoServerCaching() 
    Response.Cache.SetNoStore() 
    Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches) 
End Sub 
+0

la page n'est définitivement pas mise en cache. cela a quelque chose à voir avec le fait que je l'exécute sur une machine dans l'intranet – benpage

Questions connexes