0

このコードは常に私の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();

このコードは、ダミー値をハードコーディングしたときに、ページを1回だけロードします(必要に応じて)。

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"/>

まだ何もありません。誰かが私が見ないものを見ますか?

4

4 に答える 4

1
GetDocument(doclocation);

このメソッドはどういうわけかリダイレクト コードを返すのでしょうか? または、動的コンテンツの iframe または img である可能性がありますか?

もしそうなら:

一般に、URL 応答が原因で、コントロールが 2 回呼び出される可能性があります。まず、コンテンツをレンダリングします。その後、ブラウザーはタグ (iframe、img) ソースをダウンロードしようとしますが、これは実際には生成された動的コンテンツです。そのため、Web サーバーに別の要求を行います。その場合、別のリクエストであるため、別のビューステートを持つ別のページ オブジェクトが作成されます。

于 2009-01-19T00:37:09.187 に答える
0

簡単な推測: ページ ライフ サイクルのこの段階で、GetDocument() を含むクラスは既にガベージ コレクションを行っているのではないでしょうか? ASP.NET ワーカー プロセスは、そのメソッドを再度読み取るためにページをリロードする必要がありますか?

于 2009-01-19T00:40:27.760 に答える
0

Page_Load で試しましたか?なぜ GetDocument は静的メソッドなのですか?

于 2009-01-28T21:22:49.733 に答える
0

これに対する解決策はまだ見つかりましたか?私は同じ問題を抱えています。私のコードはあなたのコードのほとんどを反映しています。主な違いは、PDF が IFrame でホストされていることです。

私が見つけた非常に興味深い手がかり: Word.doc をストリームバックすると、一度だけ読み込まれ、pdf の場合は 2 回読み込まれます。また、さまざまなクライアント デスクトップからさまざまな動作を見てきました。Adobe のバージョンが関係しているのではないかと考えています。

アップデート:

私の場合、HttpCacheability を NoCache に設定していました。これを確認すると、クライアント キャッシュ以外のオプションを使用すると、pdf が二重にダウンロードされます。まったく設定しない (デフォルトは非公開) か、明示的に非公開または公開に設定するだけで問題が解決し、他のすべての設定はドキュメントの二重ロードを複製しました。

于 2009-04-22T11:52:13.920 に答える