質問
このコードにより、aspxページは常に2回読み込まれます。これは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();
このコードは、ダミー値をハードコードするときにページを一度だけロードします(そうするべきです)。
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();
また、web.configファイルで適切に測定するためにリクエストの長さを増やしました。
<httpRuntime executionTimeout="180" maxRequestLength="400000"/>
まだ何もありません。誰も私が見ないものを見ますか?
解決
これに対する解決策はまだ見つかりましたか?私は同じ問題を抱えていますが、私のコードはあなたのコードのほとんどです。主な違いは、私のpdfがIFrameでホストされていることです。
とても興味深い手がかりを見つけました: Word.docをストリームバックすると、一度だけロードされ、pdfの場合は2回ロードされます。また、さまざまなクライアントデスクトップからさまざまな動作を見てきました。 Adobe版はそれと何か関係があるのではないかと思っています。
更新:
私の場合、HttpCacheabilityをNoCacheに設定していました。これを検証する際に、クライアント以外のキャッシュオプションを使用すると、pdfが二重にダウンロードされます。まったく設定しない(デフォルトはPrivateに設定する)か、明示的にPrivateまたはPublicに設定するだけで問題が修正され、他のすべての設定はドキュメントの二重の読み込みを複製します。
他のヒント
GetDocument(doclocation);
このメソッドはどういうわけかリダイレクトコードを返しますか?または動的コンテンツのiframeまたはimgである可能性がありますか?
その場合:
一般に、URL応答のためにコントロールが2回呼び出される可能性があります。まず、コンテンツをレンダリングします。その後、ブラウザは、実際に生成される動的コンテンツであるタグ(iframe、img)ソースをダウンロードしようとします。そのため、Webサーバーに対して別の要求を行います。その場合、別のリクエストであるため、別のビューステートを持つ別のページオブジェクトが作成されます。
簡単な推測:ページライフサイクルのこの段階で、GetDocument()を含むクラスが既にガベージコレクションを実行している可能性がありますか? ASP.NETワーカープロセスは、そのメソッドを再度読み取るためにページをリロードする必要がありますか?
Page_Loadで試してみましたか?そして、なぜGetDocumentは静的メソッドなのですか?