Question

Ce code fera toujours charger ma page aspx deux fois. Et cela n’a rien à voir avec AutoEventWireup.

Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "inline;filename=data.pdf");
Response.BufferOutput = true;
byte[] response = GetDocument(doclocation);
Response.AddHeader("Content-Length", response.Length.ToString());
Response.BinaryWrite(response);
Response.End();

Ce code ne fera charger ma page qu'une seule fois (comme il se doit) lorsque je codifie certaines valeurs factices.

Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "inline;filename=data.pdf");
Response.BufferOutput = true;
byte[] response = new byte[] {10,11,12,13};
Response.AddHeader("Content-Length", response.Length.ToString());
Response.BinaryWrite(response);
Response.End();

J'ai également augmenté la longueur de la demande pour faire bonne mesure dans le fichier web.config.

<httpRuntime executionTimeout="180" maxRequestLength="400000"/>

Toujours rien. Quelqu'un voit quelque chose que je ne vois pas?

Était-ce utile?

La solution

Avez-vous déjà trouvé une solution à ce problème? J'ai le même problème, mon code est à peu près un miroir du vôtre. La principale différence est que mon pdf est hébergé dans un IFrame.

J'ai trouvé des indices intéressants: Si je diffuse un fichier Word.doc en arrière, il n'est chargé qu'une seule fois, si pdf est chargé deux fois. En outre, j'ai observé différents comportements de différents ordinateurs de bureau clients. Je pense que la version Adobe peut avoir quelque chose à voir avec cela.

Mise à jour:

Dans mon cas, je configurais HttpCacheability sur NoCache. En vérifiant cela, l’une quelconque des options de cache non client provoquerait le double téléchargement du pdf. Le fait de ne pas le définir du tout (par défaut sur Privé) ou explicitement de le définir en privé ou en public résoudrait le problème, tous les autres paramètres dupliquant le double chargement du document.

Autres conseils

GetDocument(doclocation);

Peut-être que cette méthode retourne en quelque sorte le code de redirection? ou peut-être un iframe ou img pour votre contenu dynamique?

Si oui:

En général, le contrôle peut être appelé deux fois à cause de la réponse de l'URL. D'abord, il rend le contenu. Après cela, votre navigateur essaie de télécharger la source de la balise (iframe, img), qui est en réalité un contenu dynamique généré. Donc, il fait une autre demande au serveur Web. Dans ce cas, un autre objet de page créé ayant un état de visualisation différent, car il s'agit d'une requête différente.

Quick Guess: Se pourrait-il qu'à ce stade du cycle de vie de la page, la classe contenant GetDocument () ait déjà effectué le ramassage des ordures? Le processus de travail ASP.NET doit ensuite recharger la page pour pouvoir relire cette méthode?

L'avez-vous essayé dans le Page_Load? et pourquoi GetDocument est-il une méthode statique?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top