すべて、投稿されたファイルを保存したコントローラーがあります(以下のコードを確認してください)。完了するまでに約20〜30分かかりました。しかし、ファイルを保存した後、RedirectToAction が機能しないことがわかりました。表示される IE ステータス バー:
Waiting for http://......./index.
ところで、私のセッション状態は SQL Server に保存されます。タイムアウトは 300 分です。以前ここに投稿した IIS 7 アプリ プールのアイドル時間と関係がある場合、この問題はわかりません。アクションにリダイレクトされませんでしたが、セッションがまだ存在することがわかりました。ファイルとレコードは正常に保存されました。唯一の問題は、リダイレクトされなかったことです。私を助けてください。ありがとう。
[HttpPost]
[AcceptButton("Upload")]
public ActionResult Upload(UploadPackageModel model)
{
//after about 20-30 min for 160MB file-upload, runs here.
DeployLogModel tempLog = null;
try
{
if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
{
var file = Request.Files[0];
var fileName = Path.GetFileName(file.FileName);
string sUploadFullPath = string.Empty;
model.ID = Guid.NewGuid();//PK id of Uploaded Package
string sUploadFileName = model.ID + Path.GetExtension(file.FileName);
model.CreatedBy = DataHelp.LoginAdministrator.ID.ToString();
model.LastUpdatedBy = DataHelp.LoginAdministrator.ID.ToString();
model.PackageSize = Request.Files[0].ContentLength;
model.CreatedDate = DateTime.UtcNow;
model.LastUpdatedDate = DateTime.UtcNow;
model.PackageName = fileName;
string rootPath = AppDomain.CurrentDomain.BaseDirectory + "\\" + "DeployPackages\\";
sUploadFullPath = Path.Combine(rootPath, sUploadFileName);
model.PackagePath = sUploadFullPath;
if (!Directory.Exists(rootPath))
Directory.CreateDirectory(rootPath);
file.SaveAs(sUploadFullPath);//Save the uploaded package.
model.SavePackInfoIntoDB(model);//Save record to DB
}
}
catch (Exception ex)
{
Log.Write("-Upload-Package-failed-:\r\n" + ex.Message + "\r\n" + ex.StackTrace);
}
return RedirectToAction("Index");//does not work.
}
ファイルとレコードは正常に保存されました。唯一の問題は、リダイレクトされなかったことです。
アップデート:
Web.config httpRuntime 設定は次のとおりです。
<httpRuntime executionTimeout="14400" maxRequestLength="716800" />
インデックスアクションコードを追加するために編集されました:
public ActionResult Index(int? page)
{
var db = DbContextHelper.CreateInstance();
//Find all uploaded packages.
var packages = db.DeployPackages.OrderByDescending(x => x.CreatedDate).Select(x => new PackageModel
{
PackageId = x.ID,
UploadedBy = x.CreatedBy,
Description = x.Description,
PackageName = x.PackageName,
PackageSize = x.PackageSize,
PackagePath = x.PackagePath,
UploadTime = x.CreatedDate,
VersionName = x.VersionName
}).ToList();
int pageSize = ConfigHelper.BigPageSizeNum;
int pageNumber = (page ?? 1);
return View(packages.ToPagedList(pageNumber, pageSize));
}
Fiddler トレース情報を追加するために編集
result protocol Host Url
200 http test.cloudapp.net /package/upload
200 http test.cloudapp.net /package/index
のフィドラーで応答の html コンテンツを確認できます/package/index
が、ブラウザは同じ page( /package/upload
) でフリーズするだけです。
windows.location.href を js コードで変更する方法があるかどうか疑問に思いました。私の考えは、アップロード アクションが正常に終了したときです。次に、従来のasp.netページのresponse.writeスクリプトのようなスクリプトをクライアントに出力します。js は、windows.location.href を にリダイレクトするように変更し/package/index
ます。ASP.NET MVC4 で作成する方法はありますか?