2009-01-19 130 views
0

此代碼將始終使我的aspx頁面加載兩次。這與AutoEventWireup無關。C#寫入輸出流

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

還沒有。任何人都看到我不喜歡的東西?

+0

此代碼在哪裏? – 2009-01-19 00:37:58

回答

0

您是否找到了該解決方法?我有同樣的問題,我的代碼幾乎是你的鏡像。主要區別在於我的pdf是在IFrame中託管的。

如此有趣的線索我找到了: 如果我流回一個Word.doc它只會被加載一次,如果它被加載兩次。另外,我看到了不同客戶端桌面的不同行爲。我認爲Adobe版本可能與它有關。

更新:

在我來說,我設置了HttpCacheability爲nocache。在驗證這一點時,任何非客戶端緩存選項都會導致pdf的雙重下載。只是根本不設置它(默認爲私有)或明確地將其設置爲私有或公開將會解決該問題,所有其他設置都會重複該文檔的雙重負載。

1
GetDocument(doclocation); 

可能是這種方法以某種方式返回重定向代碼?或者可能是您的動態內容的iframe或img?

如果是這樣的:

一般控制能拿因爲URL響應的叫了兩聲。首先它呈現內容。之後,您的瀏覽器嘗試下載實際上是生成的動態內容的標記(iframe,img)源。所以它向Web服務器發出了另一個請求。在這種情況下,創建另一個頁面對象具有不同的視圖狀態,因爲它是一個不同的請求。

0

快速猜測:難道在頁面生命週期的這個階段,包含GetDocument()的類已經經歷了垃圾收集? ASP.NET Worker進程需要重新加載頁面才能再次讀取該方法?

0

你在Page_Load中試過嗎?爲什麼GetDocument是一個靜態方法?