2010-02-02 93 views
0

我使用HttpWebRequest上傳文件到一個ASP.Net MVC應用程序,但由於某種原因我未知,它無法持續上傳。爲什麼ASP.Net MVC中的文件上傳失敗?

我知道這個文件很好,因爲如果你嘗試了足夠多的時間,它最終會上傳並可以在服務器上查看。當它失敗時,服務器和客戶端都不會報告與上傳直接相關的任何錯誤,上傳只是在隨機位置和時間中途停止,並且我的MVC操作方法被調用而不加載文件(Request.Files.Count == 0)。

這似乎只是我們的生產環境中DSL的一個問題。測試和開發環境正常工作,生產環境在辦公室(服務器的真正快速連接)中工作正常,但在家中通過DSL運行時失敗。

正如你在下面看到的,它失敗的地方很基本。

[Authorize] 
[AcceptVerbs(HttpVerbs.Put | HttpVerbs.Post)] 
[ValidateInput(false)] 
public int UploadScene(int sceneID, int tourID, string name, int number, PhotoType photoType) 
{ 
    SceneInfo scene; 
    if (Request.Files.Count < 1) throw new InvalidOperationException("Image file not uploaded."); 
    // process file... 
} 

看來,這可能是配置,但我不能確定它可能是什麼。我們在集羣中運行(我們有4個Web服務器),所以它可能與此有關,但是我正在測試一臺服務器(我可以通過名稱來隔離計算機,並且可以驗證它是否正在處理我的請求)。我也確定它運行在它自己的應用程序池中。我還應該檢查什麼?

我們在服務器上使用IIS6和.Net 3.5。

+0

該文件有多大?您可能會遇到一些腳本超時。 – 2010-02-02 18:30:34

+0

我不認爲這是一個腳本超時,因爲它有時會在幾秒鐘內失敗。我還將服務器上的超時設置爲1小時,將客戶端上的超時設置爲20分鐘。 Brian 2010-02-02 18:45:11

+0

你看過IIS日誌嗎? – stej 2010-02-02 18:56:34

回答

1

我檢查了事件查看器,發現應用程序池由於虛擬內存檢查而被回收。我把它關掉了,並且能夠上傳超過20張圖像而沒有問題。

當然這並不能解釋爲什麼回收會導致文件上傳立即失敗。我的印象是舊池將繼續處理任何現有的請求,直到它們完成或關閉時間限制(爲了處理文件上載,我們已將它設置爲10分鐘)。

1

您是否嘗試過包裝您的表格< form> tag?

<% using (Html.BeginForm("Action", "Controller", FormMethod.Post, new { @enctype = "multipart/form-data" })) { %> 
+0

我沒有使用網絡表單,我直接從HttpWebRequest上傳。 – Brian 2010-02-02 20:51:55